8
8
9
9
#include " java_object_factory.h"
10
10
11
+ #include < util/array_element_from_pointer.h>
11
12
#include < util/expr_initializer.h>
12
13
#include < util/nondet.h>
13
14
#include < util/nondet_bool.h>
@@ -1200,10 +1201,10 @@ void java_object_factoryt::array_loop_init_code(
1200
1201
assignments.add (std::move (max_test));
1201
1202
}
1202
1203
1203
- const dereference_exprt arraycellref{
1204
- plus_exprt{ array_init_symexpr, counter_expr}} ;
1204
+ const dereference_exprt element_at_counter =
1205
+ array_element_from_pointer ( array_init_symexpr, counter_expr) ;
1205
1206
1206
- bool new_item_is_primitive = arraycellref .type ().id () != ID_pointer;
1207
+ bool new_item_is_primitive = element_at_counter .type ().id () != ID_pointer;
1207
1208
1208
1209
// Use a temporary to initialise a new, or update an existing, non-primitive.
1209
1210
// This makes it clearer that in a sequence like
@@ -1213,17 +1214,17 @@ void java_object_factoryt::array_loop_init_code(
1213
1214
exprt init_expr;
1214
1215
if (new_item_is_primitive)
1215
1216
{
1216
- init_expr = arraycellref ;
1217
+ init_expr = element_at_counter ;
1217
1218
}
1218
1219
else
1219
1220
{
1220
1221
init_expr = allocate_objects.allocate_automatic_local_object (
1221
- arraycellref .type (), " new_array_item" );
1222
+ element_at_counter .type (), " new_array_item" );
1222
1223
1223
1224
// If we're updating an existing array item, read the existing object that
1224
1225
// we (may) alter:
1225
1226
if (update_in_place != update_in_placet::NO_UPDATE_IN_PLACE)
1226
- assignments.add (code_assignt (init_expr, arraycellref ));
1227
+ assignments.add (code_assignt (init_expr, element_at_counter ));
1227
1228
}
1228
1229
1229
1230
// MUST_UPDATE_IN_PLACE only applies to this object.
@@ -1249,7 +1250,7 @@ void java_object_factoryt::array_loop_init_code(
1249
1250
{
1250
1251
// We used a temporary variable to update or initialise an array item;
1251
1252
// now write it into the array:
1252
- assignments.add (code_assignt (arraycellref , init_expr));
1253
+ assignments.add (code_assignt (element_at_counter , init_expr));
1253
1254
}
1254
1255
1255
1256
exprt java_one=from_integer (1 , java_int_type ());
@@ -1389,11 +1390,9 @@ bool java_object_factoryt::gen_nondet_enum_init(
1389
1390
allocate_objects,
1390
1391
assignments);
1391
1392
1392
- // Generate statement using pointer arithmetic to access array element:
1393
- // expr = (expr.type())*(enum_array_expr + index_expr);
1394
- plus_exprt plus (enum_array_expr, index_expr);
1395
- const dereference_exprt arraycellref (plus);
1396
- code_assignt enum_assign (expr, typecast_exprt (arraycellref, expr.type ()));
1393
+ const dereference_exprt element_at_index =
1394
+ array_element_from_pointer (enum_array_expr, index_expr);
1395
+ code_assignt enum_assign (expr, typecast_exprt (element_at_index, expr.type ()));
1397
1396
assignments.add (enum_assign);
1398
1397
1399
1398
return true ;
0 commit comments