mirror of
https://github.com/Z3Prover/z3
synced 2025-08-20 02:00:22 +00:00
Make ast_manager::get_family_id(symbol const &) side-effect free. The version with side-effects is now called ast_manager::mk_family_id
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
3ddb1a85f1
commit
d92efeb0c5
56 changed files with 127 additions and 108 deletions
|
@ -583,7 +583,7 @@ bool arith_recognizers::is_numeral(expr const * n, rational & val, bool & is_int
|
|||
}
|
||||
|
||||
arith_util::arith_util(ast_manager & m):
|
||||
arith_recognizers(m.get_family_id("arith")),
|
||||
arith_recognizers(m.mk_family_id("arith")),
|
||||
m_manager(m),
|
||||
m_plugin(0) {
|
||||
}
|
||||
|
|
|
@ -548,7 +548,7 @@ func_decl * array_recognizers::get_as_array_func_decl(app * n) const {
|
|||
}
|
||||
|
||||
array_util::array_util(ast_manager& m):
|
||||
array_recognizers(m.get_family_id("array")),
|
||||
array_recognizers(m.mk_family_id("array")),
|
||||
m_manager(m) {
|
||||
}
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ void display_parameters(std::ostream & out, unsigned n, parameter const * p) {
|
|||
//
|
||||
// -----------------------------------
|
||||
|
||||
family_id family_manager::get_family_id(symbol const & s) {
|
||||
family_id family_manager::mk_family_id(symbol const & s) {
|
||||
family_id r;
|
||||
if (m_families.find(s, r)) {
|
||||
return r;
|
||||
|
@ -149,7 +149,15 @@ family_id family_manager::get_family_id(symbol const & s) {
|
|||
return r;
|
||||
}
|
||||
|
||||
bool family_manager::has_family(symbol const & s) {
|
||||
family_id family_manager::get_family_id(symbol const & s) const {
|
||||
family_id r;
|
||||
if (m_families.find(s, r))
|
||||
return r;
|
||||
else
|
||||
return null_family_id;
|
||||
}
|
||||
|
||||
bool family_manager::has_family(symbol const & s) const {
|
||||
return m_families.contains(s);
|
||||
}
|
||||
|
||||
|
@ -1297,12 +1305,12 @@ void ast_manager::init() {
|
|||
m_expr_id_gen.reset(0);
|
||||
m_decl_id_gen.reset(c_first_decl_id);
|
||||
m_some_value_proc = 0;
|
||||
m_basic_family_id = get_family_id("basic");
|
||||
m_label_family_id = get_family_id("label");
|
||||
m_pattern_family_id = get_family_id("pattern");
|
||||
m_model_value_family_id = get_family_id("model-value");
|
||||
m_user_sort_family_id = get_family_id("user-sort");
|
||||
m_arith_family_id = get_family_id("arith");
|
||||
m_basic_family_id = mk_family_id("basic");
|
||||
m_label_family_id = mk_family_id("label");
|
||||
m_pattern_family_id = mk_family_id("pattern");
|
||||
m_model_value_family_id = mk_family_id("model-value");
|
||||
m_user_sort_family_id = mk_family_id("user-sort");
|
||||
m_arith_family_id = mk_family_id("arith");
|
||||
basic_decl_plugin * plugin = alloc(basic_decl_plugin);
|
||||
register_plugin(m_basic_family_id, plugin);
|
||||
m_bool_sort = plugin->mk_bool_sort();
|
||||
|
@ -1435,7 +1443,7 @@ void ast_manager::copy_families_plugins(ast_manager const & from) {
|
|||
<< ", target has_family: " << m_family_manager.has_family(fid) << "\n";
|
||||
if (m_family_manager.has_family(fid)) tout << get_family_id(fid_name) << "\n";);
|
||||
if (!m_family_manager.has_family(fid)) {
|
||||
family_id new_fid = get_family_id(fid_name);
|
||||
family_id new_fid = mk_family_id(fid_name);
|
||||
TRACE("copy_families_plugins", tout << "new target fid created: " << new_fid << " fid_name: " << fid_name << "\n";);
|
||||
}
|
||||
TRACE("copy_families_plugins", tout << "target fid: " << get_family_id(fid_name) << "\n";);
|
||||
|
@ -1472,7 +1480,7 @@ void ast_manager::set_next_expr_id(unsigned id) {
|
|||
unsigned ast_manager::get_node_size(ast const * n) { return ::get_node_size(n); }
|
||||
|
||||
void ast_manager::register_plugin(symbol const & s, decl_plugin * plugin) {
|
||||
family_id id = m_family_manager.get_family_id(s);
|
||||
family_id id = m_family_manager.mk_family_id(s);
|
||||
SASSERT(is_format_manager() || s != symbol("format"));
|
||||
register_plugin(id, plugin);
|
||||
}
|
||||
|
|
|
@ -188,10 +188,20 @@ class family_manager {
|
|||
svector<symbol> m_names;
|
||||
public:
|
||||
family_manager():m_next_id(0) {}
|
||||
|
||||
/**
|
||||
\brief Return the family_id for s, a new id is created if !has_family(s)
|
||||
|
||||
If has_family(s), then this method is equivalent to get_family_id(s)
|
||||
*/
|
||||
family_id mk_family_id(symbol const & s);
|
||||
|
||||
/**
|
||||
\brief Return the family_id for s, return null_family_id if s was not registered in the manager.
|
||||
*/
|
||||
family_id get_family_id(symbol const & s) const;
|
||||
|
||||
family_id get_family_id(symbol const & s);
|
||||
|
||||
bool has_family(symbol const & s);
|
||||
bool has_family(symbol const & s) const;
|
||||
|
||||
void get_dom(svector<symbol>& dom) const { m_families.get_dom(dom); }
|
||||
|
||||
|
@ -1483,8 +1493,10 @@ public:
|
|||
|
||||
small_object_allocator & get_allocator() { return m_alloc; }
|
||||
|
||||
family_id get_family_id(symbol const & s) const { return const_cast<ast_manager*>(this)->m_family_manager.get_family_id(s); }
|
||||
|
||||
family_id mk_family_id(symbol const & s) { return m_family_manager.mk_family_id(s); }
|
||||
family_id mk_family_id(char const * s) { return mk_family_id(symbol(s)); }
|
||||
|
||||
family_id get_family_id(symbol const & s) const { return m_family_manager.get_family_id(s); }
|
||||
family_id get_family_id(char const * s) const { return get_family_id(symbol(s)); }
|
||||
|
||||
symbol const & get_family_name(family_id fid) const { return m_family_manager.get_name(fid); }
|
||||
|
@ -1507,7 +1519,7 @@ public:
|
|||
|
||||
bool has_plugin(family_id fid) const { return get_plugin(fid) != 0; }
|
||||
|
||||
bool has_plugin(symbol const & s) const { return has_plugin(get_family_id(s)); }
|
||||
bool has_plugin(symbol const & s) const { return m_family_manager.has_family(s) && has_plugin(m_family_manager.get_family_id(s)); }
|
||||
|
||||
void get_dom(svector<symbol> & dom) const { m_family_manager.get_dom(dom); }
|
||||
|
||||
|
|
|
@ -795,11 +795,11 @@ public:
|
|||
m_simplify_implies(simplify_implies)
|
||||
{
|
||||
m_basic_fid = m.get_basic_family_id();
|
||||
m_label_fid = m.get_family_id("label");
|
||||
m_bv_fid = m.get_family_id("bv");
|
||||
m_arith_fid = m.get_family_id("arith");
|
||||
m_array_fid = m.get_family_id("array");
|
||||
m_dt_fid = m.get_family_id("datatype");
|
||||
m_label_fid = m.mk_family_id("label");
|
||||
m_bv_fid = m.mk_family_id("bv");
|
||||
m_arith_fid = m.mk_family_id("arith");
|
||||
m_array_fid = m.mk_family_id("array");
|
||||
m_dt_fid = m.mk_family_id("datatype");
|
||||
}
|
||||
|
||||
void operator()(expr* n) {
|
||||
|
@ -1009,7 +1009,7 @@ ast_smt_pp::ast_smt_pp(ast_manager& m):
|
|||
m_status("unknown"),
|
||||
m_category(),
|
||||
m_logic(),
|
||||
m_dt_fid(m.get_family_id("datatype")),
|
||||
m_dt_fid(m.mk_family_id("datatype")),
|
||||
m_is_declared(&m_is_declared_default),
|
||||
m_simplify_implies(true)
|
||||
{}
|
||||
|
|
|
@ -59,7 +59,7 @@ void bv_decl_plugin::set_manager(ast_manager * m, family_id id) {
|
|||
m_xor3 = m_manager->mk_func_decl(symbol("xor3"), 3, d, b, func_decl_info(m_family_id, OP_XOR3));
|
||||
m_manager->inc_ref(m_xor3);
|
||||
|
||||
m_int_sort = m_manager->mk_sort(m_manager->get_family_id("arith"), INT_SORT);
|
||||
m_int_sort = m_manager->mk_sort(m_manager->mk_family_id("arith"), INT_SORT);
|
||||
SASSERT(m_int_sort != 0); // arith_decl_plugin must be installed before bv_decl_plugin.
|
||||
m_manager->inc_ref(m_int_sort);
|
||||
}
|
||||
|
@ -801,10 +801,10 @@ bool bv_recognizers::mult_inverse(rational const & n, unsigned bv_size, rational
|
|||
}
|
||||
|
||||
bv_util::bv_util(ast_manager & m):
|
||||
bv_recognizers(m.get_family_id(symbol("bv"))),
|
||||
bv_recognizers(m.mk_family_id(symbol("bv"))),
|
||||
m_manager(m) {
|
||||
SASSERT(m.has_plugin(symbol("bv")));
|
||||
m_plugin = static_cast<bv_decl_plugin*>(m.get_plugin(m.get_family_id("bv")));
|
||||
m_plugin = static_cast<bv_decl_plugin*>(m.get_plugin(m.mk_family_id("bv")));
|
||||
}
|
||||
|
||||
app * bv_util::mk_numeral(rational const & val, sort* s) {
|
||||
|
@ -827,7 +827,7 @@ sort * bv_util::mk_sort(unsigned bv_size) {
|
|||
}
|
||||
|
||||
app * bv_util::mk_bv2int(expr* e) {
|
||||
sort* s = m_manager.mk_sort(m_manager.get_family_id("arith"), INT_SORT);
|
||||
sort* s = m_manager.mk_sort(m_manager.mk_family_id("arith"), INT_SORT);
|
||||
parameter p(s);
|
||||
return m_manager.mk_app(get_fid(), OP_BV2INT, 1, &p, 1, &e);
|
||||
}
|
||||
|
|
|
@ -673,7 +673,7 @@ bool datatype_decl_plugin::is_value(app * e) const {
|
|||
|
||||
datatype_util::datatype_util(ast_manager & m):
|
||||
m_manager(m),
|
||||
m_family_id(m.get_family_id("datatype")),
|
||||
m_family_id(m.mk_family_id("datatype")),
|
||||
m_asts(m) {
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ decl_collector::decl_collector(ast_manager & m, bool preds):
|
|||
m_manager(m),
|
||||
m_sep_preds(preds) {
|
||||
m_basic_fid = m_manager.get_basic_family_id();
|
||||
m_dt_fid = m_manager.get_family_id("datatype");
|
||||
m_dt_fid = m_manager.mk_family_id("datatype");
|
||||
}
|
||||
|
||||
void decl_collector::visit(ast* n) {
|
||||
|
|
|
@ -629,7 +629,7 @@ namespace datalog {
|
|||
m(m),
|
||||
m_arith(m),
|
||||
m_bv(m),
|
||||
m_fid(m.get_family_id(symbol("datalog_relation")))
|
||||
m_fid(m.mk_family_id(symbol("datalog_relation")))
|
||||
{}
|
||||
|
||||
// create a constant belonging to a given finite domain.
|
||||
|
|
|
@ -31,7 +31,7 @@ float_decl_plugin::float_decl_plugin():
|
|||
void float_decl_plugin::set_manager(ast_manager * m, family_id id) {
|
||||
decl_plugin::set_manager(m, id);
|
||||
|
||||
family_id aid = m_manager->get_family_id("arith");
|
||||
family_id aid = m_manager->mk_family_id("arith");
|
||||
m_real_sort = m_manager->mk_sort(aid, REAL_SORT);
|
||||
SASSERT(m_real_sort != 0); // arith_decl_plugin must be installed before float_decl_plugin.
|
||||
m_manager->inc_ref(m_real_sort);
|
||||
|
@ -42,7 +42,7 @@ void float_decl_plugin::set_manager(ast_manager * m, family_id id) {
|
|||
|
||||
if (m_manager->has_plugin(symbol("bv"))) {
|
||||
// bv plugin is optional, so m_bv_plugin may be 0
|
||||
m_bv_fid = m_manager->get_family_id("bv");
|
||||
m_bv_fid = m_manager->mk_family_id("bv");
|
||||
m_bv_plugin = static_cast<bv_decl_plugin*>(m_manager->get_plugin(m_bv_fid));
|
||||
}
|
||||
}
|
||||
|
@ -512,7 +512,7 @@ bool float_decl_plugin::is_value(app * e) const {
|
|||
|
||||
float_util::float_util(ast_manager & m):
|
||||
m_manager(m),
|
||||
m_fid(m.get_family_id("float")),
|
||||
m_fid(m.mk_family_id("float")),
|
||||
m_a_util(m) {
|
||||
m_plugin = static_cast<float_decl_plugin*>(m.get_plugin(m_fid));
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace format_ns {
|
|||
symbol f("format");
|
||||
if (!fm(m).has_plugin(f))
|
||||
fm(m).register_plugin(f, alloc(format_decl_plugin));
|
||||
return fm(m).get_family_id(f);
|
||||
return fm(m).mk_family_id(f);
|
||||
}
|
||||
|
||||
static family_id fid(ast_manager & m) {
|
||||
|
|
|
@ -41,7 +41,7 @@ macro_util::macro_util(ast_manager & m, simplifier & s):
|
|||
|
||||
arith_simplifier_plugin * macro_util::get_arith_simp() const {
|
||||
if (m_arith_simp == 0) {
|
||||
const_cast<macro_util*>(this)->m_arith_simp = static_cast<arith_simplifier_plugin*>(m_simplifier.get_plugin(m_manager.get_family_id("arith")));
|
||||
const_cast<macro_util*>(this)->m_arith_simp = static_cast<arith_simplifier_plugin*>(m_simplifier.get_plugin(m_manager.mk_family_id("arith")));
|
||||
}
|
||||
SASSERT(m_arith_simp != 0);
|
||||
return m_arith_simp;
|
||||
|
@ -49,7 +49,7 @@ arith_simplifier_plugin * macro_util::get_arith_simp() const {
|
|||
|
||||
bv_simplifier_plugin * macro_util::get_bv_simp() const {
|
||||
if (m_bv_simp == 0) {
|
||||
const_cast<macro_util*>(this)->m_bv_simp = static_cast<bv_simplifier_plugin*>(m_simplifier.get_plugin(m_manager.get_family_id("bv")));
|
||||
const_cast<macro_util*>(this)->m_bv_simp = static_cast<bv_simplifier_plugin*>(m_simplifier.get_plugin(m_manager.mk_family_id("bv")));
|
||||
}
|
||||
SASSERT(m_bv_simp != 0);
|
||||
return m_bv_simp;
|
||||
|
|
|
@ -91,7 +91,7 @@ pattern_inference::pattern_inference(ast_manager & m, pattern_inference_params &
|
|||
simplifier(m),
|
||||
m_params(params),
|
||||
m_bfid(m.get_basic_family_id()),
|
||||
m_afid(m.get_family_id("arith")),
|
||||
m_afid(m.mk_family_id("arith")),
|
||||
m_le(m),
|
||||
m_nested_arith_only(true),
|
||||
m_block_loop_patterns(params.m_pi_block_loop_patterns),
|
||||
|
|
|
@ -150,7 +150,7 @@ class pattern_inference : public simplifier {
|
|||
void save_candidate(expr * n, unsigned delta);
|
||||
void reset();
|
||||
public:
|
||||
collect(ast_manager & m, pattern_inference & o):m_manager(m), m_owner(o), m_afid(m.get_family_id("arith")) {}
|
||||
collect(ast_manager & m, pattern_inference & o):m_manager(m), m_owner(o), m_afid(m.mk_family_id("arith")) {}
|
||||
void operator()(expr * n, unsigned num_bindings);
|
||||
};
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ proof_checker::proof_checker(ast_manager& m) : m(m), m_todo(m), m_marked(), m_pi
|
|||
if (!m.has_plugin(fam_name)) {
|
||||
m.register_plugin(fam_name, alloc(hyp_decl_plugin));
|
||||
}
|
||||
m_hyp_fid = m.get_family_id(fam_name);
|
||||
m_hyp_fid = m.mk_family_id(fam_name);
|
||||
// m_spc_fid = m.get_family_id("spc");
|
||||
m_nil = m.mk_const(m_hyp_fid, OP_NIL);
|
||||
}
|
||||
|
|
|
@ -27,25 +27,25 @@ Revision History:
|
|||
#include"float_decl_plugin.h"
|
||||
|
||||
void reg_decl_plugins(ast_manager & m) {
|
||||
if (!m.get_plugin(m.get_family_id(symbol("arith")))) {
|
||||
if (!m.get_plugin(m.mk_family_id(symbol("arith")))) {
|
||||
m.register_plugin(symbol("arith"), alloc(arith_decl_plugin));
|
||||
}
|
||||
if (!m.get_plugin(m.get_family_id(symbol("bv")))) {
|
||||
if (!m.get_plugin(m.mk_family_id(symbol("bv")))) {
|
||||
m.register_plugin(symbol("bv"), alloc(bv_decl_plugin));
|
||||
}
|
||||
if (!m.get_plugin(m.get_family_id(symbol("array")))) {
|
||||
if (!m.get_plugin(m.mk_family_id(symbol("array")))) {
|
||||
m.register_plugin(symbol("array"), alloc(array_decl_plugin));
|
||||
}
|
||||
if (!m.get_plugin(m.get_family_id(symbol("datatype")))) {
|
||||
if (!m.get_plugin(m.mk_family_id(symbol("datatype")))) {
|
||||
m.register_plugin(symbol("datatype"), alloc(datatype_decl_plugin));
|
||||
}
|
||||
if (!m.get_plugin(m.get_family_id(symbol("datalog_relation")))) {
|
||||
if (!m.get_plugin(m.mk_family_id(symbol("datalog_relation")))) {
|
||||
m.register_plugin(symbol("datalog_relation"), alloc(datalog::dl_decl_plugin));
|
||||
}
|
||||
if (!m.get_plugin(m.get_family_id(symbol("seq")))) {
|
||||
if (!m.get_plugin(m.mk_family_id(symbol("seq")))) {
|
||||
m.register_plugin(symbol("seq"), alloc(seq_decl_plugin));
|
||||
}
|
||||
if (!m.get_plugin(m.get_family_id(symbol("float")))) {
|
||||
if (!m.get_plugin(m.mk_family_id(symbol("float")))) {
|
||||
m.register_plugin(symbol("float"), alloc(float_decl_plugin));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ void bv_elim::elim(quantifier* q, quantifier_ref& r) {
|
|||
expr_ref new_body(m_manager);
|
||||
expr* old_body = q->get_expr();
|
||||
unsigned num_decls = q->get_num_decls();
|
||||
family_id bfid = m_manager.get_family_id("bv");
|
||||
family_id bfid = m_manager.mk_family_id("bv");
|
||||
|
||||
//
|
||||
// Traverse sequence of bound variables to eliminate
|
||||
|
|
|
@ -37,7 +37,7 @@ protected:
|
|||
void set_reduce_invoked() { m_reduce_invoked = true; }
|
||||
|
||||
public:
|
||||
simplifier_plugin(symbol const & fname, ast_manager & m):m_manager(m), m_fid(m.get_family_id(fname)), m_presimp(false), m_reduce_invoked(false) {}
|
||||
simplifier_plugin(symbol const & fname, ast_manager & m):m_manager(m), m_fid(m.mk_family_id(fname)), m_presimp(false), m_reduce_invoked(false) {}
|
||||
|
||||
bool reduce_invoked() const { return m_reduce_invoked; }
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ static_features::static_features(ast_manager & m):
|
|||
m_manager(m),
|
||||
m_autil(m),
|
||||
m_bfid(m.get_basic_family_id()),
|
||||
m_afid(m.get_family_id("arith")),
|
||||
m_lfid(m.get_family_id("label")),
|
||||
m_afid(m.mk_family_id("arith")),
|
||||
m_lfid(m.mk_family_id("label")),
|
||||
m_label_sym("label"),
|
||||
m_pattern_sym("pattern"),
|
||||
m_expr_list_sym("expr-list") {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue