33
33
34
34
#include " add_failed_symbols.h"
35
35
36
+ // Due to a large number of functions defined inline, `value_sett` and
37
+ // associated types are documented in its header file, `value_set.h`.
38
+
36
39
const value_sett::object_map_dt value_sett::object_map_dt::blank{};
37
40
object_numberingt value_sett::object_numbering;
38
41
@@ -1205,6 +1208,12 @@ void value_sett::assign(
1205
1208
object_mapt values_rhs;
1206
1209
get_value_set (rhs, values_rhs, ns, is_simplified);
1207
1210
1211
+ // Permit custom subclass to alter the read values prior to write:
1212
+ adjust_assign_rhs_values (rhs, ns, values_rhs);
1213
+
1214
+ // Permit custom subclass to perform global side-effects prior to write:
1215
+ apply_assign_side_effects (lhs, rhs, ns);
1216
+
1208
1217
assign_rec (lhs, values_rhs, " " , ns, add_to_sets);
1209
1218
}
1210
1219
}
@@ -1484,7 +1493,7 @@ void value_sett::do_end_function(
1484
1493
assign (lhs, rhs, ns, false , false );
1485
1494
}
1486
1495
1487
- void value_sett::apply_code (
1496
+ void value_sett::apply_code_rec (
1488
1497
const codet &code,
1489
1498
const namespacet &ns)
1490
1499
{
@@ -1493,7 +1502,7 @@ void value_sett::apply_code(
1493
1502
if (statement==ID_block)
1494
1503
{
1495
1504
forall_operands (it, code)
1496
- apply_code (to_code (*it), ns);
1505
+ apply_code_rec (to_code (*it), ns);
1497
1506
}
1498
1507
else if (statement==ID_function_call)
1499
1508
{
@@ -1611,6 +1620,10 @@ void value_sett::apply_code(
1611
1620
{
1612
1621
// doesn't do anything
1613
1622
}
1623
+ else if (statement==ID_dead)
1624
+ {
1625
+ // Ignore by default; could prune the value set.
1626
+ }
1614
1627
else
1615
1628
{
1616
1629
// std::cerr << code.pretty() << '\n';
0 commit comments