21
21
#include < util/simplify_expr.h>
22
22
23
23
#include < langapi/language_util.h>
24
+ #include < util/range.h>
24
25
25
26
#ifdef DEBUG
26
27
#include < iostream>
@@ -308,8 +309,7 @@ bool value_sett::eval_pointer_offset(
308
309
{
309
310
assert (expr.operands ().size ()==1 );
310
311
311
- object_mapt reference_set;
312
- get_value_set (expr.op0 (), reference_set, ns, true );
312
+ const object_mapt reference_set = get_value_set (expr.op0 (), ns, true );
313
313
314
314
exprt new_expr;
315
315
mp_integer previous_offset=0 ;
@@ -356,8 +356,7 @@ void value_sett::get_value_set(
356
356
value_setst::valuest &dest,
357
357
const namespacet &ns) const
358
358
{
359
- object_mapt object_map;
360
- get_value_set (std::move (expr), object_map, ns, false );
359
+ object_mapt object_map = get_value_set (std::move (expr), ns, false );
361
360
362
361
for (object_map_dt::const_iterator
363
362
it=object_map.read ().begin ();
@@ -372,6 +371,14 @@ void value_sett::get_value_set(
372
371
#endif
373
372
}
374
373
374
+ std::list<exprt>
375
+ value_sett::get_value_set (exprt expr, const namespacet &ns) const
376
+ {
377
+ const object_mapt object_map = get_value_set (std::move (expr), ns, false );
378
+ return make_range (object_map.read ())
379
+ .map ([&](const object_map_dt::value_type &pair) { return to_expr (pair); });
380
+ }
381
+
375
382
void value_sett::get_value_set (
376
383
exprt expr,
377
384
object_mapt &dest,
@@ -384,6 +391,19 @@ void value_sett::get_value_set(
384
391
get_value_set_rec (expr, dest, " " , expr.type (), ns);
385
392
}
386
393
394
+ value_sett::object_mapt value_sett::get_value_set (
395
+ exprt expr,
396
+ const namespacet &ns,
397
+ bool is_simplified) const
398
+ {
399
+ if (!is_simplified)
400
+ simplify (expr, ns);
401
+
402
+ object_mapt dest;
403
+ get_value_set_rec (expr, dest, " " , expr.type (), ns);
404
+ return dest;
405
+ }
406
+
387
407
// / Check if 'suffix' starts with 'field'.
388
408
// / Suffix is delimited by periods and '[]' (array access) tokens, so we're
389
409
// / looking for ".field($|[]|.)"
@@ -1303,8 +1323,7 @@ void value_sett::assign(
1303
1323
else
1304
1324
{
1305
1325
// basic type
1306
- object_mapt values_rhs;
1307
- get_value_set (rhs, values_rhs, ns, is_simplified);
1326
+ object_mapt values_rhs = get_value_set (rhs, ns, is_simplified);
1308
1327
1309
1328
// Permit custom subclass to alter the read values prior to write:
1310
1329
adjust_assign_rhs_values (rhs, ns, values_rhs);
0 commit comments