Skip to content

Commit eee80e1

Browse files
committed
evaluation function of interpreter const again
passes a pointer to the main messaget to the interpreter
1 parent 88cdd4b commit eee80e1

File tree

6 files changed

+58
-56
lines changed

6 files changed

+58
-56
lines changed

src/goto-instrument/goto_instrument_parse_options.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ int goto_instrument_parse_optionst::doit()
428428
if(cmdline.isset("interpreter"))
429429
{
430430
status() << "Starting interpreter" << eom;
431-
interpreter(symbol_table, goto_functions, get_message_handler());
431+
interpreter(symbol_table, goto_functions, this);
432432
return 0;
433433
}
434434

src/goto-programs/interpreter.cpp

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,17 @@ Function: interpretert::operator()
4141
void interpretert::operator()()
4242
{
4343
show=true;
44-
status() << "Initialize:" << eom;
44+
message->status() << "Initialize:" << messaget::eom;
4545
initialise(true);
4646
try
4747
{
4848
std::cout << "Type h for help" << std::endl;
4949
while(!done) command();
50-
status() << "Program End." << messaget::endl << eom;
50+
message->status() << "Program End." << messaget::endl << messaget::eom;
5151
}
5252
catch (const char *e)
5353
{
54-
error() << e << messaget::endl << eom;
54+
message->error() << e << messaget::endl << messaget::eom;
5555
}
5656
while(!done) command();
5757
}
@@ -119,19 +119,19 @@ Function: interpretert::show_state
119119
void interpretert::show_state()
120120
{
121121
if(!show) return;
122-
status() << messaget::endl << eom;
123-
status() << "----------------------------------------------------"
124-
<< messaget::endl << eom;
122+
message->status() << messaget::endl << messaget::eom;
123+
message->status() << "----------------------------------------------------"
124+
<< messaget::endl << messaget::eom;
125125

126126
if(PC==function->second.body.instructions.end())
127127
{
128-
status() << "End of function `"
128+
message->status() << "End of function `"
129129
<< function->first << "'" << messaget::endl;
130130
}
131131
else
132-
function->second.body.output_instruction(ns, function->first, status(), PC);
132+
function->second.body.output_instruction(ns, function->first, message->status(), PC);
133133

134-
status() << eom;
134+
message->status() << messaget::eom;
135135
}
136136

137137
/*******************************************************************\
@@ -210,7 +210,7 @@ void interpretert::command()
210210
return;
211211
}
212212
}
213-
json_steps.output(result());
213+
json_steps.output(message->result());
214214
}
215215
else if(ch=='m')
216216
{
@@ -231,7 +231,7 @@ void interpretert::command()
231231
return;
232232
}
233233
}
234-
steps.output(ns, result());
234+
steps.output(ns, message->result());
235235
}
236236
else if(ch=='r')
237237
{
@@ -470,8 +470,8 @@ void interpretert::execute_other()
470470
unsigned size=get_size(PC->code.op0().type());
471471
while(rhs.size()<size) rhs.insert(rhs.end(),tmp.begin(),tmp.end());
472472
if(size!=rhs.size())
473-
error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
474-
<< size << ")" << messaget::endl << eom;
473+
message->error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
474+
<< size << ")" << messaget::endl << messaget::eom;
475475
else
476476
{
477477
assign(address, rhs);
@@ -682,8 +682,8 @@ exprt interpretert::get_value(const typet &type, std::vector<mp_integer> &rhs,un
682682
index_exprt index_expr(symbol_expr,from_integer(cell.offset, integer_typet()));
683683
return index_expr;
684684
}
685-
error() << "pointer out of memory " << rhs[offset] << ">"
686-
<< memory.size() << messaget::endl << eom;
685+
message->error() << "pointer out of memory " << rhs[offset] << ">"
686+
<< memory.size() << messaget::endl << messaget::eom;
687687
throw "pointer out of memory";
688688
}
689689
return from_integer(rhs[offset], type);
@@ -715,8 +715,8 @@ void interpretert::execute_assign()
715715
unsigned size=get_size(code_assign.lhs().type());
716716

717717
if(size!=rhs.size())
718-
error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
719-
<< size << ")" << messaget::endl << eom;
718+
message->error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
719+
<< size << ")" << messaget::endl << messaget::eom;
720720
else
721721
{
722722
goto_trace_stept &trace_step=steps.get_last_step();
@@ -770,8 +770,8 @@ void interpretert::assign(
770770
{
771771
memory_cellt &cell=memory[integer2unsigned(address)];
772772
if(show) {
773-
status() << "** assigning " << cell.identifier << "["
774-
<< cell.offset << "]:=" << rhs[i] << messaget::endl << eom;
773+
message->status() << "** assigning " << cell.identifier << "["
774+
<< cell.offset << "]:=" << rhs[i] << messaget::endl << messaget::eom;
775775
}
776776
cell.value=rhs[i];
777777
if(cell.initialised==0) cell.initialised=1;
@@ -816,7 +816,7 @@ void interpretert::execute_assert()
816816
if ((targetAssert==PC) || stop_on_assertion)
817817
throw "assertion failed";
818818
else if (show)
819-
error() << "assertion failed" << messaget::endl << eom;
819+
message->error() << "assertion failed" << messaget::endl << messaget::eom;
820820
}
821821
}
822822

@@ -940,7 +940,7 @@ void interpretert::execute_function_call()
940940
return;
941941
}
942942
if (show)
943-
error() << "no body for "+id2string(identifier) << eom;//TODO:used to be throw. need some better approach? need to check state of buffers (and by refs)
943+
message->error() << "no body for "+id2string(identifier) << messaget::eom;//TODO:used to be throw. need some better approach? need to check state of buffers (and by refs)
944944
}
945945
}
946946

@@ -1154,13 +1154,13 @@ void interpretert::list_non_bodied() {
11541154
}
11551155
}
11561156

1157-
result() << "non bodied varibles " << funcs << messaget::endl << eom;
1157+
message->result() << "non bodied varibles " << funcs << messaget::endl << messaget::eom;
11581158
std::map<const irep_idt,const irep_idt>::const_iterator it;
11591159
/*for(it=function_input_vars.begin(); it!=function_input_vars.end(); it++)
11601160
{
1161-
message.result() << it->first << "=" << it->second.front() << messaget::endl;
1161+
message->result() << it->first << "=" << it->second.front() << messaget::endl;
11621162
}*/
1163-
result() << eom;
1163+
message->result() << messaget::eom;
11641164
}
11651165

11661166
char interpretert::is_opaque_function(const goto_programt::instructionst::const_iterator &it, irep_idt &id)
@@ -1345,10 +1345,10 @@ void interpretert::print_inputs() {
13451345
list_inputs();
13461346
for(input_varst::iterator it=input_vars.begin();it!=input_vars.end();
13471347
it++) {
1348-
result() << it->first << "=" << from_expr(ns, it->first, it->second)
1349-
<< "[" << it->second.type().id() << "]" << messaget::endl << eom;
1348+
message->result() << it->first << "=" << from_expr(ns, it->first, it->second)
1349+
<< "[" << it->second.type().id() << "]" << messaget::endl << messaget::eom;
13501350
}
1351-
result() << eom;
1351+
message->result() << messaget::eom;
13521352
}
13531353

13541354
/*******************************************************************
@@ -1365,10 +1365,10 @@ void interpretert::print_memory(bool input_flags) {
13651365
for(unsigned i=0;i<memory.size();i++)
13661366
{
13671367
memory_cellt &cell=memory[i];
1368-
debug() << cell.identifier << "[" << cell.offset << "]"
1369-
<< "=" << cell.value << eom;
1370-
if(input_flags) debug() << "(" << (int)cell.initialised << ")" << eom;
1371-
debug() << messaget::endl << eom;
1368+
message->debug() << cell.identifier << "[" << cell.offset << "]"
1369+
<< "=" << cell.value << messaget::eom;
1370+
if(input_flags) message->debug() << "(" << (int)cell.initialised << ")" << messaget::eom;
1371+
message->debug() << messaget::endl << messaget::eom;
13721372
}
13731373
}
13741374

@@ -1447,7 +1447,7 @@ void interpretert::prune_inputs(input_varst &inputs,list_input_varst& function_i
14471447
}
14481448
catch (const char *e)
14491449
{
1450-
error() << e << messaget::endl << eom;
1450+
message->error() << e << messaget::endl << messaget::eom;
14511451
}
14521452
list_inputs();
14531453
list_inputs(inputs);
@@ -1667,8 +1667,8 @@ void interpretert::get_value_tree(const irep_idt& capture_symbol,
16671667
auto findit=inputs.find(capture_symbol);
16681668
if(findit==inputs.end())
16691669
{
1670-
error() << "Stub method returned without defining " << capture_symbol
1671-
<< ". Did the program trace end inside a stub?\n" << eom;
1670+
message->error() << "Stub method returned without defining " << capture_symbol
1671+
<< ". Did the program trace end inside a stub?\n" << messaget::eom;
16721672
return;
16731673
}
16741674

@@ -1841,7 +1841,7 @@ Function: interpreter
18411841
void interpreter(
18421842
const symbol_tablet &symbol_table,
18431843
const goto_functionst &goto_functions,
1844-
message_handlert &message_handler)
1844+
messaget *message_handler)
18451845
{
18461846
interpretert interpreter(symbol_table,goto_functions,message_handler);
18471847
interpreter();

src/goto-programs/interpreter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ Author: Daniel Kroening, [email protected]
1616
void interpreter(
1717
const symbol_tablet &symbol_table,
1818
const goto_functionst &goto_functions,
19-
message_handlert &message_handler);
19+
messaget *);
2020

2121
#endif

src/goto-programs/interpreter_class.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,19 @@
1515
1616
\*******************************************************************/
1717

18-
class interpretert:public messaget
18+
class interpretert
1919
{
2020
public:
2121
interpretert(
2222
const symbol_tablet &_symbol_table,
2323
const goto_functionst &_goto_functions,
24-
message_handlert &_message_handler):
25-
messaget(_message_handler),
24+
messaget *_message_handler):
2625
symbol_table(_symbol_table),
2726
ns(_symbol_table),
28-
goto_functions(_goto_functions)
27+
goto_functions(_goto_functions)
2928
{
29+
message = _message_handler;
30+
3031
}
3132

3233
void operator()();
@@ -60,6 +61,7 @@ class interpretert:public messaget
6061
const namespacet ns;
6162
const goto_functionst &goto_functions;
6263
typedef std::map<const irep_idt,const typet> dynamic_typest;
64+
messaget *message;
6365
mutable dynamic_typest dynamic_types;
6466
mutable memory_mapt memory_map;
6567

@@ -142,7 +144,7 @@ class interpretert:public messaget
142144
int stack_depth;
143145
int thread_id;
144146

145-
bool evaluate_boolean(const exprt &expr)
147+
bool evaluate_boolean(const exprt &expr) const
146148
{
147149
std::vector<mp_integer> v;
148150
evaluate(expr, v);
@@ -161,9 +163,9 @@ class interpretert:public messaget
161163

162164
void evaluate(
163165
const exprt &expr,
164-
std::vector<mp_integer> &dest);
166+
std::vector<mp_integer> &dest) const;
165167

166-
mp_integer evaluate_address(const exprt &expr);
168+
mp_integer evaluate_address(const exprt &expr) const;
167169

168170
void initialise(bool init);
169171
void show_state();

src/goto-programs/interpreter_evaluate.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ Function: interpretert::evaluate
197197

198198
void interpretert::evaluate(
199199
const exprt &expr,
200-
std::vector<mp_integer> &dest)
200+
std::vector<mp_integer> &dest) const
201201
{
202202
if(expr.id()==ID_constant)
203203
{
@@ -269,7 +269,7 @@ void interpretert::evaluate(
269269
irep_idt value=to_constant_expr(expr).get_value();
270270
const char *str=value.c_str();
271271
unsigned length=strlen(str)+1;
272-
if (show) warning() << "string decoding not fully implemented " << length << messaget::endl << eom;
272+
if (show) message->warning() << "string decoding not fully implemented " << length << messaget::endl << messaget::eom;
273273
mp_integer tmp=value.get_no();
274274
dest.push_back(tmp);
275275
return;
@@ -318,12 +318,12 @@ void interpretert::evaluate(
318318
side_effect_exprt side_effect=to_side_effect_expr(expr);
319319
if(side_effect.get_statement()==ID_nondet)
320320
{
321-
if (show) error() << "nondet not implemented" << messaget::endl << eom;
321+
if (show) message->error() << "nondet not implemented" << messaget::endl << messaget::eom;
322322
return;
323323
}
324324
else if(side_effect.get_statement()==ID_malloc)
325325
{
326-
if (show) error() << "malloc not fully implemented " << expr.type().subtype().pretty() << messaget::endl << eom;
326+
if (show) message->error() << "malloc not fully implemented " << expr.type().subtype().pretty() << messaget::endl << messaget::eom;
327327
std::stringstream buffer;
328328
num_dynamic_objects++;
329329
buffer <<"symex_dynamic::dynamic_object" << num_dynamic_objects;
@@ -332,7 +332,7 @@ void interpretert::evaluate(
332332
dest.push_back(address);
333333
return;
334334
}
335-
if (show) error() << "side effect not implemented " << side_effect.get_statement() << messaget::endl << eom;
335+
if (show) message->error() << "side effect not implemented " << side_effect.get_statement() << messaget::endl << messaget::eom;
336336
}
337337
else if(expr.id()==ID_bitor)
338338
{
@@ -835,10 +835,10 @@ void interpretert::evaluate(
835835
return;
836836
}
837837
// if (!show) return;
838-
error() << "!! failed to evaluate expression: "
838+
message->error() << "!! failed to evaluate expression: "
839839
<< from_expr(ns, function->first, expr)
840-
<< messaget::endl << eom;
841-
error() << expr.id() << "[" << expr.type().id() << "]" << messaget::endl << eom;
840+
<< messaget::endl << messaget::eom;
841+
message->error() << expr.id() << "[" << expr.type().id() << "]" << messaget::endl << messaget::eom;
842842
}
843843

844844
/*******************************************************************\
@@ -853,7 +853,7 @@ Function: interpretert::evaluate_address
853853
854854
\*******************************************************************/
855855

856-
mp_integer interpretert::evaluate_address(const exprt &expr)
856+
mp_integer interpretert::evaluate_address(const exprt &expr) const
857857
{
858858
if(expr.id()==ID_symbol)
859859
{
@@ -938,9 +938,9 @@ mp_integer interpretert::evaluate_address(const exprt &expr)
938938

939939
if (show)
940940
{
941-
error() << "!! failed to evaluate address: "
941+
message->error() << "!! failed to evaluate address: "
942942
<< from_expr(ns, function->first, expr)
943-
<< messaget::endl << eom;
943+
<< messaget::endl << messaget::eom;
944944
}
945945
return 0;
946946
}

src/test_gen/java_test_case_generator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ bool java_test_case_generatort::is_meta(const irep_idt &id)
2525
inputst java_test_case_generatort::generate_inputs(const symbol_tablet &st, const goto_functionst &gf,
2626
const goto_tracet &trace, interpretert::list_input_varst& opaque_function_returns)
2727
{
28-
interpretert interpreter(st, gf, get_message_handler());
28+
interpretert interpreter(st, gf, this);
2929
inputst res(interpreter.load_counter_example_inputs(trace, opaque_function_returns));
3030
for (inputst::const_iterator it(res.begin()); it != res.end();)
3131
if (is_meta(it->first)) it=res.erase(it);

0 commit comments

Comments
 (0)