@@ -33,23 +33,27 @@ 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 (const irep_idt &function_identifier, goto_programt &);
37
37
38
38
// Lower java_new for a single instruction
39
- goto_programt::targett
40
- lower_java_new (goto_programt &, goto_programt::targett);
39
+ goto_programt::targett lower_java_new (
40
+ const irep_idt &function_identifier,
41
+ goto_programt &,
42
+ goto_programt::targett);
41
43
42
44
protected:
43
45
symbol_table_baset &symbol_table;
44
46
namespacet ns;
45
47
46
48
goto_programt::targett lower_java_new (
49
+ const irep_idt &function_identifier,
47
50
exprt lhs,
48
51
side_effect_exprt rhs,
49
52
goto_programt &,
50
53
goto_programt::targett);
51
54
52
55
goto_programt::targett lower_java_new_array (
56
+ const irep_idt &function_identifier,
53
57
exprt lhs,
54
58
side_effect_exprt rhs,
55
59
goto_programt &,
@@ -68,6 +72,7 @@ class remove_java_newt : public messaget
68
72
// / Note: we have to take a copy of `lhs` and `rhs` since they would suffer
69
73
// / destruction when replacing the instruction.
70
74
goto_programt::targett remove_java_newt::lower_java_new (
75
+ const irep_idt &function_identifier,
71
76
exprt lhs,
72
77
side_effect_exprt rhs,
73
78
goto_programt &dest,
@@ -116,6 +121,7 @@ goto_programt::targett remove_java_newt::lower_java_new(
116
121
// / Note: we have to take a copy of `lhs` and `rhs` since they would suffer
117
122
// / destruction when replacing the instruction.
118
123
goto_programt::targett remove_java_newt::lower_java_new_array (
124
+ const irep_idt &function_identifier,
119
125
exprt lhs,
120
126
side_effect_exprt rhs,
121
127
goto_programt &dest,
@@ -206,7 +212,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
206
212
// `x=typecast_exprt(side_effect_exprt(...))`
207
213
symbol_exprt new_array_data_symbol = get_fresh_aux_symbol (
208
214
data_java_new_expr.type (),
209
- id2string (target-> function ),
215
+ id2string (function_identifier ),
210
216
" tmp_new_data_array" ,
211
217
location,
212
218
ID_java,
@@ -254,7 +260,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
254
260
255
261
symbol_exprt tmp_i = get_fresh_aux_symbol (
256
262
length.type (),
257
- id2string (target-> function ),
263
+ id2string (function_identifier ),
258
264
" tmp_index" ,
259
265
location,
260
266
ID_java,
@@ -286,7 +292,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
286
292
code_blockt for_body;
287
293
symbol_exprt init_sym = get_fresh_aux_symbol (
288
294
sub_type,
289
- id2string (target-> function ),
295
+ id2string (function_identifier ),
290
296
" subarray_init" ,
291
297
location,
292
298
ID_java,
@@ -311,7 +317,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
311
317
goto_convert (for_loop, symbol_table, tmp, get_message_handler (), ID_java);
312
318
313
319
// lower new side effects recursively
314
- lower_java_new (tmp);
320
+ lower_java_new (function_identifier, tmp);
315
321
316
322
dest.destructive_insert (next, tmp);
317
323
}
@@ -325,6 +331,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
325
331
// / \param target: instruction to check for java_new expressions
326
332
// / \return true if a replacement has been made
327
333
goto_programt::targett remove_java_newt::lower_java_new (
334
+ const irep_idt &function_identifier,
328
335
goto_programt &goto_program,
329
336
goto_programt::targett target)
330
337
{
@@ -338,13 +345,14 @@ goto_programt::targett remove_java_newt::lower_java_new(
338
345
339
346
if (rhs.id () == ID_side_effect && rhs.get (ID_statement) == ID_java_new)
340
347
{
341
- return lower_java_new (lhs, to_side_effect_expr (rhs), goto_program, target);
348
+ return lower_java_new (
349
+ function_identifier, lhs, to_side_effect_expr (rhs), goto_program, target);
342
350
}
343
351
344
352
if (rhs.id () == ID_side_effect && rhs.get (ID_statement) == ID_java_new_array)
345
353
{
346
354
return lower_java_new_array (
347
- lhs, to_side_effect_expr (rhs), goto_program, target);
355
+ function_identifier, lhs, to_side_effect_expr (rhs), goto_program, target);
348
356
}
349
357
350
358
return target;
@@ -355,15 +363,18 @@ goto_programt::targett remove_java_newt::lower_java_new(
355
363
// / Extra auxiliary variables may be introduced into symbol_table.
356
364
// / \param goto_program: The function body to work on.
357
365
// / \return true if one or more java_new expressions have been replaced
358
- bool remove_java_newt::lower_java_new (goto_programt &goto_program)
366
+ bool remove_java_newt::lower_java_new (
367
+ const irep_idt &function_identifier,
368
+ goto_programt &goto_program)
359
369
{
360
370
bool changed = false ;
361
371
for (goto_programt::instructionst::iterator target =
362
372
goto_program.instructions .begin ();
363
373
target != goto_program.instructions .end ();
364
374
++target)
365
375
{
366
- goto_programt::targett new_target = lower_java_new (goto_program, target);
376
+ goto_programt::targett new_target =
377
+ 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