@@ -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,
@@ -254,7 +262,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
254
262
255
263
symbol_exprt tmp_i = get_fresh_aux_symbol (
256
264
length.type (),
257
- id2string (target-> function ),
265
+ id2string (function_identifier ),
258
266
" tmp_index" ,
259
267
location,
260
268
ID_java,
@@ -288,7 +296,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
288
296
code_blockt for_body;
289
297
symbol_exprt init_sym = get_fresh_aux_symbol (
290
298
sub_type,
291
- id2string (target-> function ),
299
+ id2string (function_identifier ),
292
300
" subarray_init" ,
293
301
location,
294
302
ID_java,
@@ -312,7 +320,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
312
320
goto_convert (for_loop, symbol_table, tmp, get_message_handler (), ID_java);
313
321
314
322
// lower new side effects recursively
315
- lower_java_new (tmp);
323
+ lower_java_new (function_identifier, tmp);
316
324
317
325
dest.destructive_insert (next, tmp);
318
326
}
@@ -326,6 +334,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
326
334
// / \param target: instruction to check for java_new expressions
327
335
// / \return true if a replacement has been made
328
336
goto_programt::targett remove_java_newt::lower_java_new (
337
+ const irep_idt &function_identifier,
329
338
goto_programt &goto_program,
330
339
goto_programt::targett target)
331
340
{
@@ -339,13 +348,13 @@ goto_programt::targett remove_java_newt::lower_java_new(
339
348
340
349
if (rhs.id () == ID_side_effect && rhs.get (ID_statement) == ID_java_new)
341
350
{
342
- return lower_java_new (lhs, to_side_effect_expr (rhs), goto_program, target);
351
+ return lower_java_new (function_identifier, lhs, to_side_effect_expr (rhs), goto_program, target);
343
352
}
344
353
345
354
if (rhs.id () == ID_side_effect && rhs.get (ID_statement) == ID_java_new_array)
346
355
{
347
356
return lower_java_new_array (
348
- lhs, to_side_effect_expr (rhs), goto_program, target);
357
+ function_identifier, lhs, to_side_effect_expr (rhs), goto_program, target);
349
358
}
350
359
351
360
return target;
@@ -356,15 +365,17 @@ goto_programt::targett remove_java_newt::lower_java_new(
356
365
// / Extra auxiliary variables may be introduced into symbol_table.
357
366
// / \param goto_program: The function body to work on.
358
367
// / \return true if one or more java_new expressions have been replaced
359
- bool remove_java_newt::lower_java_new (goto_programt &goto_program)
368
+ bool remove_java_newt::lower_java_new (
369
+ const irep_idt &function_identifier,
370
+ goto_programt &goto_program)
360
371
{
361
372
bool changed = false ;
362
373
for (goto_programt::instructionst::iterator target =
363
374
goto_program.instructions .begin ();
364
375
target != goto_program.instructions .end ();
365
376
++target)
366
377
{
367
- goto_programt::targett new_target = lower_java_new (goto_program, target);
378
+ goto_programt::targett new_target = lower_java_new (function_identifier, goto_program, target);
368
379
changed = changed || new_target == target;
369
380
target = new_target;
370
381
}
@@ -382,13 +393,14 @@ bool remove_java_newt::lower_java_new(goto_programt &goto_program)
382
393
// / \param symbol_table: The symbol table to add symbols to.
383
394
// / \param message_handler: a message handler
384
395
void remove_java_new (
396
+ const irep_idt &function_identifier,
385
397
goto_programt::targett target,
386
398
goto_programt &goto_program,
387
399
symbol_table_baset &symbol_table,
388
400
message_handlert &message_handler)
389
401
{
390
402
remove_java_newt rem (symbol_table, message_handler);
391
- rem.lower_java_new (goto_program, target);
403
+ rem.lower_java_new (function_identifier, goto_program, target);
392
404
}
393
405
394
406
// / Replace every java_new or java_new_array by a malloc side-effect
@@ -398,12 +410,13 @@ void remove_java_new(
398
410
// / \param symbol_table: The symbol table to add symbols to.
399
411
// / \param message_handler: a message handler
400
412
void remove_java_new (
413
+ const irep_idt &function_identifier,
401
414
goto_functionst::goto_functiont &function,
402
415
symbol_table_baset &symbol_table,
403
416
message_handlert &message_handler)
404
417
{
405
418
remove_java_newt rem (symbol_table, message_handler);
406
- rem.lower_java_new (function.body );
419
+ rem.lower_java_new (function_identifier, function.body );
407
420
}
408
421
409
422
// / Replace every java_new or java_new_array by a malloc side-effect
@@ -420,7 +433,7 @@ void remove_java_new(
420
433
remove_java_newt rem (symbol_table, message_handler);
421
434
bool changed = false ;
422
435
for (auto &f : goto_functions.function_map )
423
- changed = rem.lower_java_new (f.second .body ) || changed;
436
+ changed = rem.lower_java_new (f.first , f. second .body ) || changed;
424
437
if (changed)
425
438
goto_functions.compute_location_numbers ();
426
439
}
0 commit comments