3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-21 13:23:39 +00:00

fix plugin translation

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-09-10 14:48:57 +03:00
parent 04e57e08ba
commit 4fe55cf8e5
2 changed files with 6 additions and 10 deletions

View file

@ -105,13 +105,14 @@ namespace datatype {
} }
def* def::translate(ast_translation& tr, util& u) { def* def::translate(ast_translation& tr, util& u) {
SASSERT(&u.get_manager() == &tr.to());
sort_ref_vector ps(tr.to()); sort_ref_vector ps(tr.to());
for (sort* p : m_params) { for (sort* p : m_params) {
ps.push_back(to_sort(tr(p))); ps.push_back(to_sort(tr(p)));
} }
def* result = alloc(def, tr.to(), u, m_name, m_class_id, ps.size(), ps.c_ptr()); def* result = alloc(def, tr.to(), u, m_name, m_class_id, ps.size(), ps.c_ptr());
for (constructor* c : *this) { for (constructor* c : *this) {
add(c->translate(tr)); result->add(c->translate(tr));
} }
if (m_sort) result->m_sort = to_sort(tr(m_sort.get())); if (m_sort) result->m_sort = to_sort(tr(m_sort.get()));
return result; return result;
@ -171,24 +172,22 @@ namespace datatype {
return *(m_util.get()); return *(m_util.get());
} }
static unsigned stack_depth = 0;
void plugin::inherit(decl_plugin* other_p, ast_translation& tr) { void plugin::inherit(decl_plugin* other_p, ast_translation& tr) {
++stack_depth;
SASSERT(stack_depth < 10);
plugin* p = dynamic_cast<plugin*>(other_p); plugin* p = dynamic_cast<plugin*>(other_p);
svector<symbol> names; svector<symbol> names;
ptr_vector<def> new_defs;
SASSERT(p); SASSERT(p);
for (auto& kv : p->m_defs) { for (auto& kv : p->m_defs) {
def* d = kv.m_value; def* d = kv.m_value;
if (!m_defs.contains(kv.m_key)) { if (!m_defs.contains(kv.m_key)) {
names.push_back(kv.m_key); names.push_back(kv.m_key);
m_defs.insert(kv.m_key, d->translate(tr, u())); new_defs.push_back(d->translate(tr, u()));
} }
} }
for (def* d : new_defs)
m_defs.insert(d->name(), d);
m_class_id = m_defs.size(); m_class_id = m_defs.size();
u().compute_datatype_size_functions(names); u().compute_datatype_size_functions(names);
--stack_depth;
} }
@ -304,7 +303,6 @@ namespace datatype {
VALIDATE_PARAM(u().is_datatype(domain[0])); VALIDATE_PARAM(u().is_datatype(domain[0]));
// blindly trust that parameter is a constructor // blindly trust that parameter is a constructor
sort* range = m_manager->mk_bool_sort(); sort* range = m_manager->mk_bool_sort();
func_decl* f = to_func_decl(parameters[0].get_ast());
func_decl_info info(m_family_id, OP_DT_RECOGNISER, num_parameters, parameters); func_decl_info info(m_family_id, OP_DT_RECOGNISER, num_parameters, parameters);
info.m_private_parameters = true; info.m_private_parameters = true;
return m.mk_func_decl(symbol(parameters[1].get_symbol()), arity, domain, range, info); return m.mk_func_decl(symbol(parameters[1].get_symbol()), arity, domain, range, info);
@ -317,7 +315,6 @@ namespace datatype {
VALIDATE_PARAM(u().is_datatype(domain[0])); VALIDATE_PARAM(u().is_datatype(domain[0]));
// blindly trust that parameter is a constructor // blindly trust that parameter is a constructor
sort* range = m_manager->mk_bool_sort(); sort* range = m_manager->mk_bool_sort();
func_decl* f = to_func_decl(parameters[0].get_ast());
func_decl_info info(m_family_id, OP_DT_IS, num_parameters, parameters); func_decl_info info(m_family_id, OP_DT_IS, num_parameters, parameters);
info.m_private_parameters = true; info.m_private_parameters = true;
return m.mk_func_decl(symbol("is"), arity, domain, range, info); return m.mk_func_decl(symbol("is"), arity, domain, range, info);

View file

@ -617,7 +617,6 @@ namespace smt2 {
SASSERT(curr_is_identifier()); SASSERT(curr_is_identifier());
symbol id = curr_id(); symbol id = curr_id();
psort_decl * d = m_ctx.find_psort_decl(id); psort_decl * d = m_ctx.find_psort_decl(id);
int idx = 0;
if (d == 0) { if (d == 0) {
unknown_sort(id); unknown_sort(id);
} }