mirror of
https://github.com/Z3Prover/z3
synced 2025-08-17 08:42:15 +00:00
hoist macro-replacer as shared utility, update eliminate-predicates and model reconstruction
This commit is contained in:
parent
5fe2ff84e9
commit
caf204ab95
6 changed files with 367 additions and 131 deletions
44
src/ast/rewriter/macro_replacer.h
Normal file
44
src/ast/rewriter/macro_replacer.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*++
|
||||
Copyright (c) 2022 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
macro_replacer.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Abstract (functor) for applying macro replacement.
|
||||
|
||||
Author:
|
||||
|
||||
Nikolaj Bjorner (nbjorner) 2022-11-24
|
||||
|
||||
Notes:
|
||||
|
||||
--*/
|
||||
#pragma once
|
||||
|
||||
#include "ast/ast.h"
|
||||
#include "util/obj_hashtable.h"
|
||||
|
||||
|
||||
class macro_replacer {
|
||||
ast_manager& m;
|
||||
ast_ref_vector m_trail;
|
||||
expr_dependency_ref_vector m_deps;
|
||||
obj_map<func_decl, std::tuple<app*, expr*, expr_dependency*>> m_map;
|
||||
struct macro_replacer_cfg;
|
||||
struct macro_replacer_rw;
|
||||
|
||||
public:
|
||||
|
||||
macro_replacer(ast_manager& m): m(m), m_trail(m), m_deps(m) {}
|
||||
|
||||
void insert(app* head, expr* def, expr_dependency* dep);
|
||||
void operator()(expr* t, expr_ref& result, expr_dependency_ref& dep);
|
||||
void operator()(expr* t, expr_ref & result) { expr_dependency_ref dep(m); (*this)(t, result, dep); }
|
||||
void operator()(expr_ref & t) { expr_ref s(t, m); (*this)(s, t); }
|
||||
|
||||
bool has_macro(func_decl* f, app_ref& head, expr_ref& def, expr_dependency_ref& d);
|
||||
};
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue