|
27 | 27 | # include <iostream>
|
28 | 28 | #endif
|
29 | 29 |
|
| 30 | +std::vector<abstract_object_pointert> eval_operands( |
| 31 | + const exprt &expr, |
| 32 | + const abstract_environmentt &env, |
| 33 | + const namespacet &ns); |
| 34 | + |
30 | 35 | abstract_object_pointert
|
31 | 36 | abstract_environmentt::eval(const exprt &expr, const namespacet &ns) const
|
32 | 37 | {
|
@@ -56,14 +61,11 @@ abstract_environmentt::eval(const exprt &expr, const namespacet &ns) const
|
56 | 61 | auto access_expr = simplified_expr;
|
57 | 62 | auto target = eval(access_expr.operands()[0], ns);
|
58 | 63 |
|
59 |
| - std::vector<abstract_object_pointert> operands; |
60 |
| - |
61 |
| - for(const auto &op : access_expr.operands()) |
62 |
| - { |
63 |
| - operands.push_back(eval(op, ns)); |
64 |
| - } |
65 |
| - |
66 |
| - return target->expression_transform(access_expr, operands, *this, ns); |
| 64 | + return target->expression_transform( |
| 65 | + access_expr, |
| 66 | + eval_operands(access_expr, *this, ns), |
| 67 | + *this, |
| 68 | + ns); |
67 | 69 | }
|
68 | 70 | else if(simplified_id == ID_address_of)
|
69 | 71 | {
|
@@ -428,14 +430,11 @@ abstract_object_pointert abstract_environmentt::eval_expression(
|
428 | 430 | abstract_object_pointert eval_obj =
|
429 | 431 | abstract_object_factory(e.type(), ns, true);
|
430 | 432 |
|
431 |
| - std::vector<abstract_object_pointert> operands; |
432 |
| - |
433 |
| - for(const auto &op : e.operands()) |
434 |
| - { |
435 |
| - operands.push_back(eval(op, ns)); |
436 |
| - } |
437 |
| - |
438 |
| - return eval_obj->expression_transform(e, operands, *this, ns); |
| 433 | + return eval_obj->expression_transform( |
| 434 | + e, |
| 435 | + eval_operands(e, *this, ns), |
| 436 | + *this, |
| 437 | + ns); |
439 | 438 | }
|
440 | 439 |
|
441 | 440 | void abstract_environmentt::erase(const symbol_exprt &expr)
|
@@ -507,3 +506,17 @@ abstract_environmentt::gather_statistics(const namespacet &ns) const
|
507 | 506 | }
|
508 | 507 | return statistics;
|
509 | 508 | }
|
| 509 | + |
| 510 | +std::vector<abstract_object_pointert> eval_operands( |
| 511 | + const exprt &expr, |
| 512 | + const abstract_environmentt &env, |
| 513 | + const namespacet &ns) |
| 514 | +{ |
| 515 | + std::vector<abstract_object_pointert> operands; |
| 516 | + |
| 517 | + for(const auto &op : expr.operands()) |
| 518 | + operands.push_back(env.eval(op, ns)); |
| 519 | + |
| 520 | + return operands; |
| 521 | +} |
| 522 | + |
0 commit comments