@@ -31,6 +31,7 @@ ufbv_rewriter::ufbv_rewriter(ast_manager & m):
31
31
m_match_subst(m),
32
32
m_bsimp(m),
33
33
m_todo(m),
34
+ m_new_args(m),
34
35
m_rewrite_todo(m),
35
36
m_rewrite_cache(m),
36
37
m_new_exprs(m) {
@@ -221,11 +222,12 @@ void ufbv_rewriter::remove_fwd_idx(func_decl * f, quantifier * demodulator) {
221
222
fwd_idx_map::iterator it = m_fwd_idx.find_iterator (f);
222
223
if (it != m_fwd_idx.end ()) {
223
224
demodulator2lhs_rhs::iterator fit = m_demodulator2lhs_rhs.find_iterator (demodulator);
224
- m.dec_ref (fit->m_value .first );
225
- m.dec_ref (fit->m_value .second );
226
- m.dec_ref (demodulator);
225
+ expr_pair p = fit->m_value ;
227
226
m_demodulator2lhs_rhs.erase (demodulator);
228
227
it->m_value ->erase (demodulator);
228
+ m.dec_ref (p.first );
229
+ m.dec_ref (p.second );
230
+ m.dec_ref (demodulator);
229
231
} else {
230
232
SASSERT (m_demodulator2lhs_rhs.contains (demodulator));
231
233
}
@@ -262,11 +264,11 @@ void ufbv_rewriter::show_fwd_idx(std::ostream & out) {
262
264
}
263
265
}
264
266
265
- bool ufbv_rewriter::rewrite1 (func_decl * f, ptr_vector<expr> & m_new_args, expr_ref & np) {
267
+ bool ufbv_rewriter::rewrite1 (func_decl * f, expr_ref_vector & m_new_args, expr_ref & np) {
266
268
fwd_idx_map::iterator it = m_fwd_idx.find_iterator (f);
267
269
if (it != m_fwd_idx.end ()) {
268
270
TRACE (" demodulator_bug" , tout << " trying to rewrite: " << f->get_name () << " args:\n " ;
269
- for ( unsigned i = 0 ; i < m_new_args. size (); i++) { tout << mk_pp ( m_new_args[i], m) << " \n " ; } );
271
+ tout << m_new_args << " \n " ;);
270
272
for (quantifier* d : *it->m_value ) {
271
273
272
274
SASSERT (m_demodulator2lhs_rhs.contains (d));
@@ -305,12 +307,12 @@ bool ufbv_rewriter::rewrite_visit_children(app * a) {
305
307
if (ebp.second )
306
308
v = ebp.first ;
307
309
}
308
- for (unsigned i = sz; i > 0 ; i-- ) {
309
- if (m_rewrite_todo[i - 1 ] == v) {
310
+ for (unsigned i = sz; i-- > 0 ;) {
311
+ if (m_rewrite_todo[i] == v) {
310
312
recursive = true ;
311
313
TRACE (" demodulator" , tout << " Detected demodulator cycle: " <<
312
314
mk_pp (a, m) << " --> " << mk_pp (v, m) << std::endl;);
313
- m_rewrite_cache. insert (e, expr_bool_pair ( v, true ) );
315
+ rewrite_cache (e, v, true );
314
316
break ;
315
317
}
316
318
}
@@ -346,7 +348,7 @@ expr * ufbv_rewriter::rewrite(expr * n) {
346
348
);
347
349
348
350
expr * e = m_rewrite_todo.back ();
349
- expr * actual = e ;
351
+ expr_ref actual (e, m) ;
350
352
351
353
if (m_rewrite_cache.contains (e)) {
352
354
const expr_bool_pair &ebp = m_rewrite_cache.get (e);
@@ -370,9 +372,8 @@ expr * ufbv_rewriter::rewrite(expr * n) {
370
372
func_decl * f = a->get_decl ();
371
373
m_new_args.reset ();
372
374
unsigned num_args = a->get_num_args ();
373
- bool all_untouched=true ;
374
- for (unsigned i = 0 ; i < num_args ; i++ ) {
375
- expr * o_child = a->get_arg (i);
375
+ bool all_untouched = true ;
376
+ for (expr* o_child : *a) {
376
377
expr * n_child;
377
378
SASSERT (m_rewrite_cache.contains (o_child) && m_rewrite_cache.get (o_child).second );
378
379
expr_bool_pair const & ebp = m_rewrite_cache.get (o_child);
@@ -386,17 +387,17 @@ expr * ufbv_rewriter::rewrite(expr * n) {
386
387
rewrite_cache (e, np, false );
387
388
// No pop.
388
389
} else {
389
- if (all_untouched) {
390
+ if (all_untouched) {
390
391
rewrite_cache (e, actual, true );
391
392
}
392
393
else {
393
394
expr_ref na (m);
394
395
if (f->get_family_id () != m.get_basic_family_id ())
395
- na = m.mk_app (f, m_new_args. size (), m_new_args. c_ptr () );
396
+ na = m.mk_app (f, m_new_args);
396
397
else
397
398
m_bsimp.mk_app (f, m_new_args.size (), m_new_args.c_ptr (), na);
398
399
TRACE (" demodulator_bug" , tout << " e:\n " << mk_pp (e, m) << " \n new_args: \n " ;
399
- for ( unsigned i = 0 ; i < m_new_args. size (); i++) { tout << mk_pp ( m_new_args[i], m) << " \n " ; }
400
+ tout << m_new_args << " \n " ;
400
401
tout << " =====>\n " ;
401
402
tout << " na:\n " << mk_pp (na, m) << " \n " ;);
402
403
rewrite_cache (e, na, true );
@@ -577,7 +578,7 @@ void ufbv_rewriter::reschedule_demodulators(func_decl * f, expr * lhs) {
577
578
expr_ref l (m);
578
579
579
580
for (auto s : *it->m_value )
580
- all_occurrences.insert (s);
581
+ all_occurrences.insert (s);
581
582
582
583
// Run over all f-demodulators
583
584
for (expr* occ : all_occurrences) {
@@ -853,6 +854,7 @@ bool ufbv_rewriter::match_subst::match_args(app * lhs, expr * const * args) {
853
854
854
855
855
856
bool ufbv_rewriter::match_subst::operator ()(app * lhs, expr * rhs, expr * const * args, expr_ref & new_rhs) {
857
+
856
858
if (match_args (lhs, args)) {
857
859
if (m_all_args_eq) {
858
860
// quick success...
0 commit comments