mirror of
https://github.com/Z3Prover/z3
synced 2025-06-28 00:48:45 +00:00
model refactor (#4723)
* refactor model fixing Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * missing cond macro Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * file Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * file Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add macros dependency Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * deps and debug Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add dependency to normal forms Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * build issues Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * compile Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix leal regression * complete model fixer Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fold back private functionality to model_finder Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * avoid duplicate fixed callbacks Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
6cc52e04c3
commit
fa58a36b9f
42 changed files with 2060 additions and 1494 deletions
|
@ -74,9 +74,15 @@ void model_core::register_decl(func_decl * d, expr * v) {
|
|||
}
|
||||
|
||||
void model_core::register_decl(func_decl * d, func_interp * fi) {
|
||||
func_interp* old_fi = update_func_interp(d, fi);
|
||||
dealloc(old_fi);
|
||||
}
|
||||
|
||||
func_interp* model_core::update_func_interp(func_decl* d, func_interp* fi) {
|
||||
TRACE("model", tout << "register " << d->get_name() << "\n";);
|
||||
SASSERT(d->get_arity() > 0);
|
||||
SASSERT(&fi->m() == &m);
|
||||
func_interp* old_fi = nullptr;
|
||||
auto& value = m_finterp.insert_if_not_there(d, nullptr);
|
||||
if (value == nullptr) {
|
||||
// new entry
|
||||
|
@ -87,10 +93,10 @@ void model_core::register_decl(func_decl * d, func_interp * fi) {
|
|||
}
|
||||
else {
|
||||
// replacing entry
|
||||
if (fi != value)
|
||||
dealloc(value);
|
||||
old_fi = value;
|
||||
value = fi;
|
||||
}
|
||||
return old_fi;
|
||||
}
|
||||
|
||||
void model_core::unregister_decl(func_decl * d) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue