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:
parent
04e57e08ba
commit
4fe55cf8e5
2 changed files with 6 additions and 10 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue