mirror of
https://github.com/Z3Prover/z3
synced 2025-06-07 14:43:23 +00:00
parent
dd3e574f81
commit
19f655c693
4 changed files with 27 additions and 9 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue