@@ -22,24 +22,26 @@ Author: Peter Schrammel
22
22
#include < util/message.h>
23
23
#include < util/pointer_offset_size.h>
24
24
25
- class remove_java_newt : public messaget
25
+ class remove_java_newt
26
26
{
27
27
public:
28
- remove_java_newt (
29
- symbol_table_baset &symbol_table,
30
- message_handlert &_message_handler)
31
- : messaget(_message_handler), symbol_table(symbol_table), ns(symbol_table)
28
+ explicit remove_java_newt (symbol_table_baset &symbol_table)
29
+ : symbol_table(symbol_table), ns(symbol_table)
32
30
{
33
31
}
34
32
35
33
// Lower java_new for a single function
36
- bool lower_java_new (const irep_idt &function_identifier, goto_programt &);
34
+ bool lower_java_new (
35
+ const irep_idt &function_identifier,
36
+ goto_programt &,
37
+ message_handlert &);
37
38
38
39
// Lower java_new for a single instruction
39
40
goto_programt::targett lower_java_new (
40
41
const irep_idt &function_identifier,
41
42
goto_programt &,
42
- goto_programt::targett);
43
+ goto_programt::targett,
44
+ message_handlert &);
43
45
44
46
protected:
45
47
symbol_table_baset &symbol_table;
@@ -57,7 +59,8 @@ class remove_java_newt : public messaget
57
59
const exprt &lhs,
58
60
const side_effect_exprt &rhs,
59
61
goto_programt &,
60
- goto_programt::targett);
62
+ goto_programt::targett,
63
+ message_handlert &);
61
64
};
62
65
63
66
// / Replaces the instruction `lhs = new java_type` by
@@ -118,6 +121,7 @@ goto_programt::targett remove_java_newt::lower_java_new(
118
121
// / \param rhs: the rhs
119
122
// / \param dest: the goto program to modify
120
123
// / \param target: the goto instruction to replace
124
+ // / \param message_handler: message handler
121
125
// / \return the iterator advanced to the last of the inserted instructions
122
126
// / Note: we have to take a copy of `lhs` and `rhs` since they would suffer
123
127
// / destruction when replacing the instruction.
@@ -126,7 +130,8 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
126
130
const exprt &lhs,
127
131
const side_effect_exprt &rhs,
128
132
goto_programt &dest,
129
- goto_programt::targett target)
133
+ goto_programt::targett target,
134
+ message_handlert &message_handler)
130
135
{
131
136
// lower_java_new_array without lhs not implemented
132
137
PRECONDITION (!lhs.is_nil ());
@@ -332,10 +337,10 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
332
337
std::move (for_body),
333
338
location);
334
339
335
- goto_convert (for_loop, symbol_table, tmp, get_message_handler () , ID_java);
340
+ goto_convert (for_loop, symbol_table, tmp, message_handler , ID_java);
336
341
337
342
// lower new side effects recursively
338
- lower_java_new (function_identifier, tmp);
343
+ lower_java_new (function_identifier, tmp, message_handler );
339
344
340
345
dest.destructive_insert (next, tmp);
341
346
}
@@ -348,11 +353,13 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
348
353
// / \param function_identifier: Name of the function containing \p target.
349
354
// / \param goto_program: program to process
350
355
// / \param target: instruction to check for java_new expressions
356
+ // / \param message_handler: message handler
351
357
// / \return true if a replacement has been made
352
358
goto_programt::targett remove_java_newt::lower_java_new (
353
359
const irep_idt &function_identifier,
354
360
goto_programt &goto_program,
355
- goto_programt::targett target)
361
+ goto_programt::targett target,
362
+ message_handlert &message_handler)
356
363
{
357
364
if (!target->is_assign ())
358
365
return target;
@@ -377,7 +384,12 @@ goto_programt::targett remove_java_newt::lower_java_new(
377
384
else if (statement == ID_java_new_array)
378
385
{
379
386
return lower_java_new_array (
380
- function_identifier, lhs, side_effect_expr, goto_program, target);
387
+ function_identifier,
388
+ lhs,
389
+ side_effect_expr,
390
+ goto_program,
391
+ target,
392
+ message_handler);
381
393
}
382
394
}
383
395
@@ -389,19 +401,21 @@ goto_programt::targett remove_java_newt::lower_java_new(
389
401
// / Extra auxiliary variables may be introduced into symbol_table.
390
402
// / \param function_identifier: Name of the function \p goto_program.
391
403
// / \param goto_program: The function body to work on.
404
+ // / \param message_handler: message handler
392
405
// / \return true if one or more java_new expressions have been replaced
393
406
bool remove_java_newt::lower_java_new (
394
407
const irep_idt &function_identifier,
395
- goto_programt &goto_program)
408
+ goto_programt &goto_program,
409
+ message_handlert &message_handler)
396
410
{
397
411
bool changed = false ;
398
412
for (goto_programt::instructionst::iterator target =
399
413
goto_program.instructions .begin ();
400
414
target != goto_program.instructions .end ();
401
415
++target)
402
416
{
403
- goto_programt::targett new_target =
404
- lower_java_new ( function_identifier, goto_program, target);
417
+ goto_programt::targett new_target = lower_java_new (
418
+ function_identifier, goto_program, target, message_handler );
405
419
changed = changed || new_target == target;
406
420
target = new_target;
407
421
}
@@ -426,8 +440,9 @@ void remove_java_new(
426
440
symbol_table_baset &symbol_table,
427
441
message_handlert &message_handler)
428
442
{
429
- remove_java_newt rem (symbol_table, message_handler);
430
- rem.lower_java_new (function_identifier, goto_program, target);
443
+ remove_java_newt rem{symbol_table};
444
+ rem.lower_java_new (
445
+ function_identifier, goto_program, target, message_handler);
431
446
}
432
447
433
448
// / Replace every java_new or java_new_array by a malloc side-effect
@@ -443,8 +458,8 @@ void remove_java_new(
443
458
symbol_table_baset &symbol_table,
444
459
message_handlert &message_handler)
445
460
{
446
- remove_java_newt rem ( symbol_table, message_handler) ;
447
- rem.lower_java_new (function_identifier, function.body );
461
+ remove_java_newt rem{ symbol_table} ;
462
+ rem.lower_java_new (function_identifier, function.body , message_handler );
448
463
}
449
464
450
465
// / Replace every java_new or java_new_array by a malloc side-effect
@@ -458,10 +473,11 @@ void remove_java_new(
458
473
symbol_table_baset &symbol_table,
459
474
message_handlert &message_handler)
460
475
{
461
- remove_java_newt rem ( symbol_table, message_handler) ;
476
+ remove_java_newt rem{ symbol_table} ;
462
477
bool changed = false ;
463
478
for (auto &f : goto_functions.function_map )
464
- changed = rem.lower_java_new (f.first , f.second .body ) || changed;
479
+ changed =
480
+ rem.lower_java_new (f.first , f.second .body , message_handler) || changed;
465
481
if (changed)
466
482
goto_functions.compute_location_numbers ();
467
483
}
0 commit comments