3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-07 14:43:23 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-04-16 16:11:00 -07:00
parent dd3e574f81
commit 19f655c693
4 changed files with 27 additions and 9 deletions

View file

@ -217,17 +217,17 @@ class psort_app : public psort {
unsigned operator()(psort_app const * d, unsigned idx) const { return d->m_args[idx]->hash(); }
};
sort * instantiate(pdecl_manager & m, unsigned n, sort * const * s) override {
sort * instantiate(pdecl_manager & m, unsigned n, sort * const * s) override {
sort * r = find(s);
if (r)
return r;
sort_ref_buffer args_i(m.m());
unsigned sz = m_args.size();
for (unsigned i = 0; i < sz; i++) {
for (unsigned i = 0; i < sz; ++i) {
sort * a = m_args[i]->instantiate(m, n, s);
args_i.push_back(a);
}
r = m_decl->instantiate(m, args_i.size(), args_i.c_ptr());
r = m_decl->instantiate(m, args_i.size(), args_i.c_ptr());
cache(m, s, r);
return r;
}
@ -685,8 +685,10 @@ sort* pdecl_manager::instantiate_datatype(psort_decl* p, symbol const& name, uns
pdecl_manager& m = *this;
sort * r = p->find(s);
if (r)
if (r) {
notify_datatype(r, p, n, s);
return r;
}
buffer<parameter> ps;
ps.push_back(parameter(name));
for (unsigned i = 0; i < n; i++)
@ -695,7 +697,16 @@ sort* pdecl_manager::instantiate_datatype(psort_decl* p, symbol const& name, uns
r = m.m().mk_sort(util.get_family_id(), DATATYPE_SORT, ps.size(), ps.c_ptr());
p->cache(m, s, r);
m.save_info(r, p, n, s);
if (n > 0 && util.is_declared(r)) {
notify_datatype(r, p, n, s);
return r;
}
void pdecl_manager::notify_datatype(sort *r, psort_decl* p, unsigned n, sort* const* s) {
if (m_notified.contains(r) || n == 0)
return;
pdecl_manager& m = *this;
datatype_util util(m.m());
if (util.is_declared(r)) {
bool has_typevar = false;
// crude check ..
for (unsigned i = 0; !has_typevar && i < n; ++i) {
@ -704,8 +715,8 @@ sort* pdecl_manager::instantiate_datatype(psort_decl* p, symbol const& name, uns
if (!has_typevar) {
m.notify_new_dt(r, p);
}
m_notified.insert(r);
}
return r;
}
bool pdatatypes_decl::instantiate(pdecl_manager & m, sort * const * s) {