@@ -33,23 +33,29 @@ class remove_java_newt : public messaget
33
33
}
34
34
35
35
// Lower java_new for a single function
36
- bool lower_java_new (goto_programt &);
36
+ bool lower_java_new (
37
+ const irep_idt &function_identifier,
38
+ goto_programt &);
37
39
38
40
// Lower java_new for a single instruction
39
41
goto_programt::targett
40
- lower_java_new (goto_programt &, goto_programt::targett);
42
+ lower_java_new (
43
+ const irep_idt &function_identifier,
44
+ goto_programt &, goto_programt::targett);
41
45
42
46
protected:
43
47
symbol_table_baset &symbol_table;
44
48
namespacet ns;
45
49
46
50
goto_programt::targett lower_java_new (
51
+ const irep_idt &function_identifier,
47
52
exprt lhs,
48
53
side_effect_exprt rhs,
49
54
goto_programt &,
50
55
goto_programt::targett);
51
56
52
57
goto_programt::targett lower_java_new_array (
58
+ const irep_idt &function_identifier,
53
59
exprt lhs,
54
60
side_effect_exprt rhs,
55
61
goto_programt &,
@@ -68,6 +74,7 @@ class remove_java_newt : public messaget
68
74
// / Note: we have to take a copy of `lhs` and `rhs` since they would suffer
69
75
// / destruction when replacing the instruction.
70
76
goto_programt::targett remove_java_newt::lower_java_new (
77
+ const irep_idt &function_identifier,
71
78
exprt lhs,
72
79
side_effect_exprt rhs,
73
80
goto_programt &dest,
@@ -116,6 +123,7 @@ goto_programt::targett remove_java_newt::lower_java_new(
116
123
// / Note: we have to take a copy of `lhs` and `rhs` since they would suffer
117
124
// / destruction when replacing the instruction.
118
125
goto_programt::targett remove_java_newt::lower_java_new_array (
126
+ const irep_idt &function_identifier,
119
127
exprt lhs,
120
128
side_effect_exprt rhs,
121
129
goto_programt &dest,
@@ -206,7 +214,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
206
214
// `x=typecast_exprt(side_effect_exprt(...))`
207
215
symbol_exprt new_array_data_symbol = get_fresh_aux_symbol (
208
216
data_java_new_expr.type (),
209
- id2string (target-> function ),
217
+ id2string (function_identifier ),
210
218
" tmp_new_data_array" ,
211
219
location,
212
220
ID_java,
@@ -253,7 +261,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
253
261
254
262
symbol_exprt tmp_i = get_fresh_aux_symbol (
255
263
length.type (),
256
- id2string (target-> function ),
264
+ id2string (function_identifier ),
257
265
" tmp_index" ,
258
266
location,
259
267
ID_java,
@@ -287,7 +295,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
287
295
code_blockt for_body;
288
296
symbol_exprt init_sym = get_fresh_aux_symbol (
289
297
sub_type,
290
- id2string (target-> function ),
298
+ id2string (function_identifier ),
291
299
" subarray_init" ,
292
300
location,
293
301
ID_java,
@@ -311,7 +319,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
311
319
goto_convert (for_loop, symbol_table, tmp, get_message_handler (), ID_java);
312
320
313
321
// lower new side effects recursively
314
- lower_java_new (tmp);
322
+ lower_java_new (function_identifier, tmp);
315
323
316
324
dest.destructive_insert (next, tmp);
317
325
}
@@ -325,6 +333,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
325
333
// / \param target: instruction to check for java_new expressions
326
334
// / \return true if a replacement has been made
327
335
goto_programt::targett remove_java_newt::lower_java_new (
336
+ const irep_idt &function_identifier,
328
337
goto_programt &goto_program,
329
338
goto_programt::targett target)
330
339
{
@@ -338,13 +347,13 @@ goto_programt::targett remove_java_newt::lower_java_new(
338
347
339
348
if (rhs.id () == ID_side_effect && rhs.get (ID_statement) == ID_java_new)
340
349
{
341
- return lower_java_new (lhs, to_side_effect_expr (rhs), goto_program, target);
350
+ return lower_java_new (function_identifier, lhs, to_side_effect_expr (rhs), goto_program, target);
342
351
}
343
352
344
353
if (rhs.id () == ID_side_effect && rhs.get (ID_statement) == ID_java_new_array)
345
354
{
346
355
return lower_java_new_array (
347
- lhs, to_side_effect_expr (rhs), goto_program, target);
356
+ function_identifier, lhs, to_side_effect_expr (rhs), goto_program, target);
348
357
}
349
358
350
359
return target;
@@ -355,15 +364,17 @@ goto_programt::targett remove_java_newt::lower_java_new(
355
364
// / Extra auxiliary variables may be introduced into symbol_table.
356
365
// / \param goto_program: The function body to work on.
357
366
// / \return true if one or more java_new expressions have been replaced
358
- bool remove_java_newt::lower_java_new (goto_programt &goto_program)
367
+ bool remove_java_newt::lower_java_new (
368
+ const irep_idt &function_identifier,
369
+ goto_programt &goto_program)
359
370
{
360
371
bool changed = false ;
361
372
for (goto_programt::instructionst::iterator target =
362
373
goto_program.instructions .begin ();
363
374
target != goto_program.instructions .end ();
364
375
++target)
365
376
{
366
- goto_programt::targett new_target = lower_java_new (goto_program, target);
377
+ goto_programt::targett new_target = lower_java_new (function_identifier, goto_program, target);
367
378
changed = changed || new_target == target;
368
379
target = new_target;
369
380
}
@@ -381,13 +392,14 @@ bool remove_java_newt::lower_java_new(goto_programt &goto_program)
381
392
// / \param symbol_table: The symbol table to add symbols to.
382
393
// / \param message_handler: a message handler
383
394
void remove_java_new (
395
+ const irep_idt &function_identifier,
384
396
goto_programt::targett target,
385
397
goto_programt &goto_program,
386
398
symbol_table_baset &symbol_table,
387
399
message_handlert &message_handler)
388
400
{
389
401
remove_java_newt rem (symbol_table, message_handler);
390
- rem.lower_java_new (goto_program, target);
402
+ rem.lower_java_new (function_identifier, goto_program, target);
391
403
}
392
404
393
405
// / Replace every java_new or java_new_array by a malloc side-effect
@@ -397,12 +409,13 @@ void remove_java_new(
397
409
// / \param symbol_table: The symbol table to add symbols to.
398
410
// / \param message_handler: a message handler
399
411
void remove_java_new (
412
+ const irep_idt &function_identifier,
400
413
goto_functionst::goto_functiont &function,
401
414
symbol_table_baset &symbol_table,
402
415
message_handlert &message_handler)
403
416
{
404
417
remove_java_newt rem (symbol_table, message_handler);
405
- rem.lower_java_new (function.body );
418
+ rem.lower_java_new (function_identifier, function.body );
406
419
}
407
420
408
421
// / Replace every java_new or java_new_array by a malloc side-effect
@@ -419,7 +432,7 @@ void remove_java_new(
419
432
remove_java_newt rem (symbol_table, message_handler);
420
433
bool changed = false ;
421
434
for (auto &f : goto_functions.function_map )
422
- changed = rem.lower_java_new (f.second .body ) || changed;
435
+ changed = rem.lower_java_new (f.first , f. second .body ) || changed;
423
436
if (changed)
424
437
goto_functions.compute_location_numbers ();
425
438
}
0 commit comments