mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 06:03:23 +00:00
z3str3: improve vector handling in simplify_parent (#4413)
This commit is contained in:
parent
882777fc1d
commit
e9eec5349d
1 changed files with 15 additions and 12 deletions
|
@ -2115,12 +2115,11 @@ namespace smt {
|
||||||
// and the parent_it iterator becomes invalidated, because we indirectly modified the container that we're iterating over.
|
// and the parent_it iterator becomes invalidated, because we indirectly modified the container that we're iterating over.
|
||||||
|
|
||||||
enode_vector current_parents;
|
enode_vector current_parents;
|
||||||
for (enode_vector::const_iterator parent_it = n_eq_enode->begin_parents(); parent_it != n_eq_enode->end_parents(); parent_it++) {
|
for (auto &parent: n_eq_enode->get_parents()) {
|
||||||
current_parents.insert(*parent_it);
|
current_parents.insert(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (enode_vector::iterator parent_it = current_parents.begin(); parent_it != current_parents.end(); ++parent_it) {
|
for (auto &e_parent : current_parents) {
|
||||||
enode * e_parent = *parent_it;
|
|
||||||
SASSERT(e_parent != nullptr);
|
SASSERT(e_parent != nullptr);
|
||||||
|
|
||||||
app * a_parent = e_parent->get_owner();
|
app * a_parent = e_parent->get_owner();
|
||||||
|
@ -2326,10 +2325,12 @@ namespace smt {
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// Case (3-1) begin: (Concat (Concat var n_eqNode) str )
|
// Case (3-1) begin: (Concat (Concat var n_eqNode) str )
|
||||||
if (arg1 == n_eqNode) {
|
if (arg1 == n_eqNode) {
|
||||||
for (enode_vector::iterator concat_parent_it = e_parent->begin_parents();
|
expr_ref_vector concat_parents(m);
|
||||||
concat_parent_it != e_parent->end_parents(); concat_parent_it++) {
|
for (auto& e_concat_parent : e_parent->get_parents()) {
|
||||||
enode * e_concat_parent = *concat_parent_it;
|
concat_parents.push_back(e_concat_parent->get_owner());
|
||||||
app * concat_parent = e_concat_parent->get_owner();
|
}
|
||||||
|
for (auto& _concat_parent : concat_parents) {
|
||||||
|
app* concat_parent = to_app(_concat_parent);
|
||||||
if (u.str.is_concat(concat_parent)) {
|
if (u.str.is_concat(concat_parent)) {
|
||||||
expr * concat_parent_arg0 = concat_parent->get_arg(0);
|
expr * concat_parent_arg0 = concat_parent->get_arg(0);
|
||||||
expr * concat_parent_arg1 = concat_parent->get_arg(1);
|
expr * concat_parent_arg1 = concat_parent->get_arg(1);
|
||||||
|
@ -2352,10 +2353,12 @@ namespace smt {
|
||||||
// Case (3-1) end: (Concat (Concat var n_eqNode) str )
|
// Case (3-1) end: (Concat (Concat var n_eqNode) str )
|
||||||
// Case (3-2) begin: (Concat str (Concat n_eqNode var) )
|
// Case (3-2) begin: (Concat str (Concat n_eqNode var) )
|
||||||
if (arg0 == n_eqNode) {
|
if (arg0 == n_eqNode) {
|
||||||
for (enode_vector::iterator concat_parent_it = e_parent->begin_parents();
|
expr_ref_vector concat_parents(m);
|
||||||
concat_parent_it != e_parent->end_parents(); concat_parent_it++) {
|
for (auto& e_concat_parent : e_parent->get_parents()) {
|
||||||
enode * e_concat_parent = *concat_parent_it;
|
concat_parents.push_back(e_concat_parent->get_owner());
|
||||||
app * concat_parent = e_concat_parent->get_owner();
|
}
|
||||||
|
for (auto& _concat_parent : concat_parents) {
|
||||||
|
app* concat_parent = to_app(_concat_parent);
|
||||||
if (u.str.is_concat(concat_parent)) {
|
if (u.str.is_concat(concat_parent)) {
|
||||||
expr * concat_parent_arg0 = concat_parent->get_arg(0);
|
expr * concat_parent_arg0 = concat_parent->get_arg(0);
|
||||||
expr * concat_parent_arg1 = concat_parent->get_arg(1);
|
expr * concat_parent_arg1 = concat_parent->get_arg(1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue