Skip to content

Commit 3534ad7

Browse files
committed
remove_java_newt isn't a messaget
Pass a message handler as an argument to the single method that requires it as there is no is-a relationship between remove_java_newt and messaget.
1 parent 77a0496 commit 3534ad7

File tree

1 file changed

+38
-22
lines changed

1 file changed

+38
-22
lines changed

jbmc/src/java_bytecode/remove_java_new.cpp

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,26 @@ Author: Peter Schrammel
2222
#include <util/message.h>
2323
#include <util/pointer_offset_size.h>
2424

25-
class remove_java_newt : public messaget
25+
class remove_java_newt
2626
{
2727
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)
3230
{
3331
}
3432

3533
// 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 &);
3738

3839
// Lower java_new for a single instruction
3940
goto_programt::targett lower_java_new(
4041
const irep_idt &function_identifier,
4142
goto_programt &,
42-
goto_programt::targett);
43+
goto_programt::targett,
44+
message_handlert &);
4345

4446
protected:
4547
symbol_table_baset &symbol_table;
@@ -57,7 +59,8 @@ class remove_java_newt : public messaget
5759
const exprt &lhs,
5860
const side_effect_exprt &rhs,
5961
goto_programt &,
60-
goto_programt::targett);
62+
goto_programt::targett,
63+
message_handlert &);
6164
};
6265

6366
/// Replaces the instruction `lhs = new java_type` by
@@ -118,6 +121,7 @@ goto_programt::targett remove_java_newt::lower_java_new(
118121
/// \param rhs: the rhs
119122
/// \param dest: the goto program to modify
120123
/// \param target: the goto instruction to replace
124+
/// \param message_handler: message handler
121125
/// \return the iterator advanced to the last of the inserted instructions
122126
/// Note: we have to take a copy of `lhs` and `rhs` since they would suffer
123127
/// destruction when replacing the instruction.
@@ -126,7 +130,8 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
126130
const exprt &lhs,
127131
const side_effect_exprt &rhs,
128132
goto_programt &dest,
129-
goto_programt::targett target)
133+
goto_programt::targett target,
134+
message_handlert &message_handler)
130135
{
131136
// lower_java_new_array without lhs not implemented
132137
PRECONDITION(!lhs.is_nil());
@@ -332,10 +337,10 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
332337
std::move(for_body),
333338
location);
334339

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);
336341

337342
// lower new side effects recursively
338-
lower_java_new(function_identifier, tmp);
343+
lower_java_new(function_identifier, tmp, message_handler);
339344

340345
dest.destructive_insert(next, tmp);
341346
}
@@ -348,11 +353,13 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
348353
/// \param function_identifier: Name of the function containing \p target.
349354
/// \param goto_program: program to process
350355
/// \param target: instruction to check for java_new expressions
356+
/// \param message_handler: message handler
351357
/// \return true if a replacement has been made
352358
goto_programt::targett remove_java_newt::lower_java_new(
353359
const irep_idt &function_identifier,
354360
goto_programt &goto_program,
355-
goto_programt::targett target)
361+
goto_programt::targett target,
362+
message_handlert &message_handler)
356363
{
357364
if(!target->is_assign())
358365
return target;
@@ -377,7 +384,12 @@ goto_programt::targett remove_java_newt::lower_java_new(
377384
else if(statement == ID_java_new_array)
378385
{
379386
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);
381393
}
382394
}
383395

@@ -389,19 +401,21 @@ goto_programt::targett remove_java_newt::lower_java_new(
389401
/// Extra auxiliary variables may be introduced into symbol_table.
390402
/// \param function_identifier: Name of the function \p goto_program.
391403
/// \param goto_program: The function body to work on.
404+
/// \param message_handler: message handler
392405
/// \return true if one or more java_new expressions have been replaced
393406
bool remove_java_newt::lower_java_new(
394407
const irep_idt &function_identifier,
395-
goto_programt &goto_program)
408+
goto_programt &goto_program,
409+
message_handlert &message_handler)
396410
{
397411
bool changed = false;
398412
for(goto_programt::instructionst::iterator target =
399413
goto_program.instructions.begin();
400414
target != goto_program.instructions.end();
401415
++target)
402416
{
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);
405419
changed = changed || new_target == target;
406420
target = new_target;
407421
}
@@ -426,8 +440,9 @@ void remove_java_new(
426440
symbol_table_baset &symbol_table,
427441
message_handlert &message_handler)
428442
{
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);
431446
}
432447

433448
/// Replace every java_new or java_new_array by a malloc side-effect
@@ -443,8 +458,8 @@ void remove_java_new(
443458
symbol_table_baset &symbol_table,
444459
message_handlert &message_handler)
445460
{
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);
448463
}
449464

450465
/// Replace every java_new or java_new_array by a malloc side-effect
@@ -458,10 +473,11 @@ void remove_java_new(
458473
symbol_table_baset &symbol_table,
459474
message_handlert &message_handler)
460475
{
461-
remove_java_newt rem(symbol_table, message_handler);
476+
remove_java_newt rem{symbol_table};
462477
bool changed = false;
463478
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;
465481
if(changed)
466482
goto_functions.compute_location_numbers();
467483
}

0 commit comments

Comments
 (0)