@@ -266,8 +266,11 @@ static void depends_in_symbol_map(const exprt &expr, std::vector<exprt> &accu)
266
266
// / \param rhs: an expression to map it to, which should be either a symbol
267
267
// / a string_exprt, an array_exprt, an array_of_exprt or an
268
268
// / if_exprt with branches of the previous kind
269
- void string_refinementt::add_symbol_to_symbol_map (
270
- const exprt &lhs, const exprt &rhs)
269
+ void add_symbol_to_symbol_map (
270
+ replace_mapt& symbol_resolve,
271
+ std::map<exprt, std::list<exprt>> &reverse_symbol_resolve,
272
+ const exprt &lhs,
273
+ const exprt &rhs)
271
274
{
272
275
PRECONDITION (lhs.id ()==ID_symbol);
273
276
PRECONDITION (rhs.id ()==ID_symbol ||
@@ -373,18 +376,29 @@ bool string_refinementt::add_axioms_for_string_assigns(
373
376
set_char_array_equality (lhs, rhs);
374
377
if (rhs.id () == ID_symbol || rhs.id () == ID_array)
375
378
{
376
- add_symbol_to_symbol_map (lhs, rhs);
379
+ add_symbol_to_symbol_map (
380
+ symbol_resolve,
381
+ reverse_symbol_resolve,
382
+ lhs,
383
+ rhs);
377
384
return false ;
378
385
}
379
386
else if (rhs.id ()==ID_nondet_symbol)
380
387
{
381
388
add_symbol_to_symbol_map (
382
- lhs, generator.fresh_symbol (" nondet_array" , lhs.type ()));
389
+ symbol_resolve,
390
+ reverse_symbol_resolve,
391
+ lhs,
392
+ generator.fresh_symbol (" nondet_array" , lhs.type ()));
383
393
return false ;
384
394
}
385
395
else if (rhs.id ()==ID_if)
386
396
{
387
- add_symbol_to_symbol_map (lhs, rhs);
397
+ add_symbol_to_symbol_map (
398
+ symbol_resolve,
399
+ reverse_symbol_resolve,
400
+ lhs,
401
+ rhs);
388
402
return true ;
389
403
}
390
404
else
@@ -396,7 +410,11 @@ bool string_refinementt::add_axioms_for_string_assigns(
396
410
if (is_refined_string_type (rhs.type ()))
397
411
{
398
412
exprt refined_rhs=generator.add_axioms_for_refined_string (rhs);
399
- add_symbol_to_symbol_map (lhs, refined_rhs);
413
+ add_symbol_to_symbol_map (
414
+ symbol_resolve,
415
+ reverse_symbol_resolve,
416
+ lhs,
417
+ refined_rhs);
400
418
return false ;
401
419
}
402
420
// Other cases are to be handled by supert::set_to.
0 commit comments