mirror of
https://github.com/Z3Prover/z3
synced 2025-04-11 03:33:35 +00:00
remove spurious copies and inc_refs around ref_vector
This commit is contained in:
parent
eabe91cdef
commit
5de6628a5d
|
@ -35,7 +35,7 @@ public:
|
|||
fail_if_proof_generation("ackermannize", g);
|
||||
TRACE("ackermannize", g->display(tout << "in\n"););
|
||||
|
||||
expr_ref_vector flas(m);
|
||||
ptr_vector<expr> flas;
|
||||
const unsigned sz = g->size();
|
||||
for (unsigned i = 0; i < sz; i++) flas.push_back(g->form(i));
|
||||
lackr lackr(m, m_p, m_st, flas, nullptr);
|
||||
|
|
|
@ -134,7 +134,7 @@ void ackr_model_converter::add_entry(model_evaluator & evaluator,
|
|||
info->abstract(arg, aarg);
|
||||
expr_ref arg_value(m);
|
||||
evaluator(aarg, arg_value);
|
||||
args.push_back(arg_value);
|
||||
args.push_back(std::move(arg_value));
|
||||
}
|
||||
if (fi->get_entry(args.c_ptr()) == nullptr) {
|
||||
TRACE("ackr_model",
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
#include "ast/for_each_expr.h"
|
||||
#include "model/model_smt2_pp.h"
|
||||
|
||||
lackr::lackr(ast_manager& m, params_ref p, lackr_stats& st, expr_ref_vector& formulas,
|
||||
solver * uffree_solver)
|
||||
lackr::lackr(ast_manager& m, const params_ref& p, lackr_stats& st,
|
||||
const ptr_vector<expr>& formulas, solver * uffree_solver)
|
||||
: m_m(m)
|
||||
, m_p(p)
|
||||
, m_formulas(formulas)
|
||||
|
@ -173,11 +173,10 @@ void lackr::abstract() {
|
|||
}
|
||||
m_info->seal();
|
||||
// perform abstraction of the formulas
|
||||
const unsigned sz = m_formulas.size();
|
||||
for (unsigned i = 0; i < sz; ++i) {
|
||||
for (expr * f : m_formulas) {
|
||||
expr_ref a(m_m);
|
||||
m_info->abstract(m_formulas.get(i), a);
|
||||
m_abstr.push_back(a);
|
||||
m_info->abstract(f, a);
|
||||
m_abstr.push_back(std::move(a));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -249,13 +248,9 @@ lbool lackr::lazy() {
|
|||
// Collect all uninterpreted terms, skipping 0-arity.
|
||||
//
|
||||
bool lackr::collect_terms() {
|
||||
ptr_vector<expr> stack;
|
||||
ptr_vector<expr> stack = m_formulas;
|
||||
expr * curr;
|
||||
expr_mark visited;
|
||||
for(unsigned i = 0; i < m_formulas.size(); ++i) {
|
||||
stack.push_back(m_formulas.get(i));
|
||||
TRACE("lackr", tout << "infla: " <<mk_ismt2_pp(m_formulas.get(i), m_m, 2) << "\n";);
|
||||
}
|
||||
|
||||
while (!stack.empty()) {
|
||||
curr = stack.back();
|
||||
|
|
|
@ -42,8 +42,8 @@ struct lackr_stats {
|
|||
**/
|
||||
class lackr {
|
||||
public:
|
||||
lackr(ast_manager& m, params_ref p, lackr_stats& st,
|
||||
expr_ref_vector& formulas, solver * uffree_solver);
|
||||
lackr(ast_manager& m, const params_ref& p, lackr_stats& st,
|
||||
const ptr_vector<expr>& formulas, solver * uffree_solver);
|
||||
~lackr();
|
||||
void updt_params(params_ref const & _p);
|
||||
|
||||
|
@ -82,7 +82,7 @@ class lackr {
|
|||
typedef ackr_helper::app_set app_set;
|
||||
ast_manager& m_m;
|
||||
params_ref m_p;
|
||||
expr_ref_vector m_formulas;
|
||||
const ptr_vector<expr>& m_formulas;
|
||||
expr_ref_vector m_abstr;
|
||||
fun2terms_map m_fun2terms;
|
||||
ackr_info_ref m_info;
|
||||
|
|
|
@ -218,10 +218,9 @@ namespace api {
|
|||
// Corner case bug: n may be in m_last_result, and this is the only reference to n.
|
||||
// When, we execute reset() it is deleted
|
||||
// To avoid this bug, I bump the reference counter before reseting m_last_result
|
||||
m().inc_ref(n);
|
||||
ast_ref node(n, m());
|
||||
m_last_result.reset();
|
||||
m_last_result.push_back(n);
|
||||
m().dec_ref(n);
|
||||
m_last_result.push_back(std::move(node));
|
||||
}
|
||||
else {
|
||||
m_ast_trail.push_back(n);
|
||||
|
|
|
@ -1199,7 +1199,7 @@ void mk_smt2_format(unsigned sz, expr * const* es, smt2_pp_environment & env, pa
|
|||
for (unsigned i = 0; i < sz; ++i) {
|
||||
format_ref fr(fm(m));
|
||||
pr(es[i], num_vars, var_prefix, fr, var_names);
|
||||
fmts.push_back(fr);
|
||||
fmts.push_back(std::move(fr));
|
||||
}
|
||||
r = mk_seq<format**, f2f>(m, fmts.c_ptr(), fmts.c_ptr() + fmts.size(), f2f());
|
||||
}
|
||||
|
|
|
@ -3108,12 +3108,12 @@ void fpa2bv_converter::mk_to_ieee_bv_unspecified(func_decl * f, unsigned num, ex
|
|||
expr_ref exp_bv(m), exp_all_ones(m);
|
||||
exp_bv = m_bv_util.mk_extract(ebits+sbits-2, sbits-1, result);
|
||||
exp_all_ones = m.mk_eq(exp_bv, m_bv_util.mk_bv_neg(m_bv_util.mk_numeral(1, ebits)));
|
||||
m_extra_assertions.push_back(exp_all_ones);
|
||||
m_extra_assertions.push_back(std::move(exp_all_ones));
|
||||
|
||||
expr_ref sig_bv(m), sig_is_non_zero(m);
|
||||
sig_bv = m_bv_util.mk_extract(sbits-2, 0, result);
|
||||
sig_is_non_zero = m.mk_not(m.mk_eq(sig_bv, m_bv_util.mk_numeral(0, sbits-1)));
|
||||
m_extra_assertions.push_back(sig_is_non_zero);
|
||||
m_extra_assertions.push_back(std::move(sig_is_non_zero));
|
||||
}
|
||||
|
||||
TRACE("fpa2bv_to_ieee_bv_unspecified", tout << "result=" << mk_ismt2_pp(result, m) << std::endl;);
|
||||
|
|
|
@ -125,7 +125,7 @@ struct bv_trailing::imp {
|
|||
for (unsigned i = 0; i < num; ++i) {
|
||||
expr * const curr = a->get_arg(i);
|
||||
VERIFY(to_rm == remove_trailing(curr, to_rm, tmp, depth - 1));
|
||||
new_args.push_back(tmp);
|
||||
new_args.push_back(std::move(tmp));
|
||||
}
|
||||
result = m.mk_app(m_util.get_fid(), OP_BADD, new_args.size(), new_args.c_ptr());
|
||||
return to_rm;
|
||||
|
@ -150,7 +150,7 @@ struct bv_trailing::imp {
|
|||
numeral c_val;
|
||||
unsigned c_sz;
|
||||
if (!m_util.is_numeral(tmp, c_val, c_sz) || !c_val.is_one())
|
||||
new_args.push_back(tmp);
|
||||
new_args.push_back(std::move(tmp));
|
||||
const unsigned sz = m_util.get_bv_size(coefficient);
|
||||
const unsigned new_sz = sz - retv;
|
||||
|
||||
|
@ -204,7 +204,7 @@ struct bv_trailing::imp {
|
|||
expr_ref_vector new_args(m);
|
||||
for (unsigned j = 0; j < i; ++j)
|
||||
new_args.push_back(a->get_arg(j));
|
||||
if (new_last) new_args.push_back(new_last);
|
||||
if (new_last) new_args.push_back(std::move(new_last));
|
||||
result = new_args.size() == 1 ? new_args.get(0)
|
||||
: m_util.mk_concat(new_args.size(), new_args.c_ptr());
|
||||
return retv;
|
||||
|
|
|
@ -196,16 +196,16 @@ void substitution::apply(unsigned num_actual_offsets, unsigned const * deltas, e
|
|||
expr_ref_vector pats(m_manager), no_pats(m_manager);
|
||||
for (unsigned i = 0; i < q->get_num_patterns(); ++i) {
|
||||
subst.apply(num_actual_offsets, deltas, expr_offset(q->get_pattern(i), off), s1, t1, er);
|
||||
pats.push_back(er);
|
||||
pats.push_back(std::move(er));
|
||||
}
|
||||
for (unsigned i = 0; i < q->get_num_no_patterns(); ++i) {
|
||||
subst.apply(num_actual_offsets, deltas, expr_offset(q->get_no_pattern(i), off), s1, t1, er);
|
||||
no_pats.push_back(er);
|
||||
no_pats.push_back(std::move(er));
|
||||
}
|
||||
subst.apply(num_actual_offsets, deltas, body, s1, t1, er);
|
||||
er = m_manager.update_quantifier(q, pats.size(), pats.c_ptr(), no_pats.size(), no_pats.c_ptr(), er);
|
||||
m_todo.pop_back();
|
||||
m_new_exprs.push_back(er);
|
||||
m_new_exprs.push_back(std::move(er));
|
||||
m_apply_cache.insert(n, er);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -320,8 +320,8 @@ namespace eq {
|
|||
<< "sz is " << sz << "\n"
|
||||
<< "subst_map[inx]: " << mk_pp(m_subst_map.get(inx), m) << "\n";);
|
||||
SASSERT(m_subst_map.get(inx) == nullptr);
|
||||
m_subst_map[inx] = r;
|
||||
m_subst.update_inv_binding_at(inx, r);
|
||||
m_subst_map[inx] = std::move(r);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -470,7 +470,7 @@ namespace eq {
|
|||
m_var2pos[idx] = i;
|
||||
def_count++;
|
||||
largest_vinx = std::max(idx, largest_vinx);
|
||||
m_new_exprs.push_back(t);
|
||||
m_new_exprs.push_back(std::move(t));
|
||||
}
|
||||
else if (!m.is_value(m_map[idx])) {
|
||||
// check if the new definition is simpler
|
||||
|
@ -482,7 +482,7 @@ namespace eq {
|
|||
m_pos2var[i] = idx;
|
||||
m_var2pos[idx] = i;
|
||||
m_map[idx] = t;
|
||||
m_new_exprs.push_back(t);
|
||||
m_new_exprs.push_back(std::move(t));
|
||||
}
|
||||
// -- prefer ground
|
||||
else if (is_app(t) && to_app(t)->is_ground() &&
|
||||
|
@ -492,7 +492,7 @@ namespace eq {
|
|||
m_pos2var[i] = idx;
|
||||
m_var2pos[idx] = i;
|
||||
m_map[idx] = t;
|
||||
m_new_exprs.push_back(t);
|
||||
m_new_exprs.push_back(std::move(t));
|
||||
}
|
||||
// -- prefer constants
|
||||
else if (is_uninterp_const(t)
|
||||
|
@ -501,7 +501,7 @@ namespace eq {
|
|||
m_pos2var[i] = idx;
|
||||
m_var2pos[idx] = i;
|
||||
m_map[idx] = t;
|
||||
m_new_exprs.push_back(t);
|
||||
m_new_exprs.push_back(std::move(t));
|
||||
}
|
||||
TRACE ("qe_def",
|
||||
tout << "Replacing definition of VAR " << idx << " from "
|
||||
|
|
|
@ -1594,7 +1594,7 @@ namespace smt {
|
|||
for (literal lit : m_assigned_literals) {
|
||||
expr_ref e(m_manager);
|
||||
literal2expr(lit, e);
|
||||
assignments.push_back(e);
|
||||
assignments.push_back(std::move(e));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4180,7 +4180,7 @@ namespace smt {
|
|||
SASSERT(get_justification(guess.var()).get_kind() == b_justification::AXIOM);
|
||||
expr_ref lit(m_manager);
|
||||
literal2expr(guess, lit);
|
||||
result.push_back(lit);
|
||||
result.push_back(std::move(lit));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1115,8 +1115,6 @@ namespace smt {
|
|||
|
||||
void internalize_assertions();
|
||||
|
||||
void assert_assumption(expr * a);
|
||||
|
||||
bool validate_assumptions(expr_ref_vector const& asms);
|
||||
|
||||
void init_assumptions(expr_ref_vector const& asms);
|
||||
|
@ -1129,8 +1127,6 @@ namespace smt {
|
|||
|
||||
void reset_assumptions();
|
||||
|
||||
void reset_clause();
|
||||
|
||||
void add_theory_assumptions(expr_ref_vector & theory_assumptions);
|
||||
|
||||
lbool mk_unsat_core(lbool result);
|
||||
|
@ -1585,8 +1581,6 @@ namespace smt {
|
|||
|
||||
//proof * const * get_asserted_formula_proofs() const { return m_asserted_formulas.get_formula_proofs(); }
|
||||
|
||||
void get_assumptions_core(ptr_vector<expr> & result);
|
||||
|
||||
void get_assertions(ptr_vector<expr> & result) { m_asserted_formulas.get_assertions(result); }
|
||||
|
||||
void display(std::ostream & out) const;
|
||||
|
|
|
@ -409,11 +409,11 @@ namespace smt {
|
|||
for (unsigned i = 0; i < num_antecedents; i++) {
|
||||
literal l = antecedents[i];
|
||||
literal2expr(l, n);
|
||||
fmls.push_back(n);
|
||||
fmls.push_back(std::move(n));
|
||||
}
|
||||
if (consequent != false_literal) {
|
||||
literal2expr(~consequent, n);
|
||||
fmls.push_back(n);
|
||||
fmls.push_back(std::move(n));
|
||||
}
|
||||
if (logic != symbol::null) out << "(set-logic " << logic << ")\n";
|
||||
visitor.collect(fmls);
|
||||
|
|
|
@ -281,7 +281,7 @@ namespace smt {
|
|||
for (unsigned i = 0; i < m_num_literals; i++) {
|
||||
expr_ref l(m);
|
||||
ctx.literal2expr(m_literals[i], l);
|
||||
lits.push_back(l);
|
||||
lits.push_back(std::move(l));
|
||||
}
|
||||
if (lits.size() == 1)
|
||||
return m.mk_th_lemma(m_th_id, lits.get(0), 0, nullptr, m_params.size(), m_params.c_ptr());
|
||||
|
@ -407,12 +407,7 @@ namespace smt {
|
|||
for (unsigned i = 0; i < m_num_literals; i++) {
|
||||
bool sign = GET_TAG(m_literals[i]) != 0;
|
||||
expr * v = UNTAG(expr*, m_literals[i]);
|
||||
expr_ref l(m);
|
||||
if (sign)
|
||||
l = m.mk_not(v);
|
||||
else
|
||||
l = v;
|
||||
lits.push_back(l);
|
||||
lits.push_back(sign ? m.mk_not(v) : v);
|
||||
}
|
||||
if (lits.size() == 1)
|
||||
return m.mk_th_lemma(m_th_id, lits.get(0), 0, nullptr, m_params.size(), m_params.c_ptr());
|
||||
|
|
|
@ -62,7 +62,7 @@ public:
|
|||
|
||||
TRACE("qfufbv_ackr_tactic", g->display(tout << "goal:\n"););
|
||||
// running implementation
|
||||
expr_ref_vector flas(m);
|
||||
ptr_vector<expr> flas;
|
||||
const unsigned sz = g->size();
|
||||
for (unsigned i = 0; i < sz; i++) flas.push_back(g->form(i));
|
||||
scoped_ptr<solver> uffree_solver = setup_sat();
|
||||
|
|
|
@ -99,6 +99,13 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
template <typename W, typename M>
|
||||
ref_vector_core& push_back(obj_ref<W,M> && n) {
|
||||
m_nodes.push_back(n.get());
|
||||
n.steal();
|
||||
return *this;
|
||||
}
|
||||
|
||||
void pop_back() {
|
||||
SASSERT(!m_nodes.empty());
|
||||
T * n = m_nodes.back();
|
||||
|
@ -253,6 +260,13 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
template <typename W, typename M>
|
||||
element_ref & operator=(obj_ref<W,M> && n) {
|
||||
m_manager.dec_ref(m_ref);
|
||||
m_ref = n.steal();
|
||||
return *this;
|
||||
}
|
||||
|
||||
T * get() const {
|
||||
return m_ref;
|
||||
}
|
||||
|
@ -288,9 +302,8 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
// prevent abuse:
|
||||
ref_vector & operator=(ref_vector const & other);
|
||||
ref_vector & operator=(ref_vector const & other) = delete;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
|
|
Loading…
Reference in a new issue