3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 03:45:51 +00:00

recursive function definitions; combine model-building functionality

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2016-03-03 07:59:03 -08:00
parent 6fa2338edc
commit 7c6540e18f
19 changed files with 129 additions and 173 deletions

View file

@ -30,20 +30,6 @@ model::model(ast_manager & m):
}
model::~model() {
decl2expr::iterator it1 = m_interp.begin();
decl2expr::iterator end1 = m_interp.end();
for (; it1 != end1; ++it1) {
m_manager.dec_ref(it1->m_key);
m_manager.dec_ref(it1->m_value);
}
decl2finterp::iterator it2 = m_finterp.begin();
decl2finterp::iterator end2 = m_finterp.end();
for (; it2 != end2; ++it2) {
m_manager.dec_ref(it2->m_key);
dealloc(it2->m_value);
}
sort2universe::iterator it3 = m_usort2universe.begin();
sort2universe::iterator end3 = m_usort2universe.end();
for (; it3 != end3; ++it3) {
@ -53,43 +39,6 @@ model::~model() {
}
}
void model::register_decl(func_decl * d, expr * v) {
SASSERT(d->get_arity() == 0);
decl2expr::obj_map_entry * entry = m_interp.insert_if_not_there2(d, 0);
if (entry->get_data().m_value == 0) {
// new entry
m_decls.push_back(d);
m_const_decls.push_back(d);
m_manager.inc_ref(d);
m_manager.inc_ref(v);
entry->get_data().m_value = v;
}
else {
// replacing entry
m_manager.inc_ref(v);
m_manager.dec_ref(entry->get_data().m_value);
entry->get_data().m_value = v;
}
}
void model::register_decl(func_decl * d, func_interp * fi) {
SASSERT(d->get_arity() > 0);
SASSERT(&fi->m() == &m_manager);
decl2finterp::obj_map_entry * entry = m_finterp.insert_if_not_there2(d, 0);
if (entry->get_data().m_value == 0) {
// new entry
m_decls.push_back(d);
m_func_decls.push_back(d);
m_manager.inc_ref(d);
entry->get_data().m_value = fi;
}
else {
// replacing entry
if (fi != entry->get_data().m_value)
dealloc(entry->get_data().m_value);
entry->get_data().m_value = fi;
}
}
void model::copy_const_interps(model const & source) {