Skip to content

Commit 20f0338

Browse files
committed
Merge remote-tracking branch 'origin/test_gen' into test_gen_mocks
2 parents 000aeb4 + eee80e1 commit 20f0338

File tree

6 files changed

+63
-61
lines changed

6 files changed

+63
-61
lines changed

src/goto-instrument/goto_instrument_parse_options.cpp

+1-1
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

+37-37
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
{
@@ -469,8 +469,8 @@ void interpretert::execute_other()
469469
unsigned size=get_size(PC->code.op0().type());
470470
while(rhs.size()<size) rhs.insert(rhs.end(),tmp.begin(),tmp.end());
471471
if(size!=rhs.size())
472-
error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
473-
<< size << ")" << messaget::endl << eom;
472+
message->error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
473+
<< size << ")" << messaget::endl << messaget::eom;
474474
else
475475
{
476476
assign(address, rhs);
@@ -681,8 +681,8 @@ exprt interpretert::get_value(const typet &type, std::vector<mp_integer> &rhs,un
681681
index_exprt index_expr(symbol_expr,from_integer(cell.offset, integer_typet()));
682682
return index_expr;
683683
}
684-
error() << "pointer out of memory " << rhs[offset] << ">"
685-
<< memory.size() << messaget::endl << eom;
684+
message->error() << "pointer out of memory " << rhs[offset] << ">"
685+
<< memory.size() << messaget::endl << messaget::eom;
686686
throw "pointer out of memory";
687687
}
688688
return from_integer(rhs[offset], type);
@@ -714,8 +714,8 @@ void interpretert::execute_assign()
714714
unsigned size=get_size(code_assign.lhs().type());
715715

716716
if(size!=rhs.size())
717-
error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
718-
<< size << ")" << messaget::endl << eom;
717+
message->error() << "!! failed to obtain rhs (" << rhs.size() << " vs. "
718+
<< size << ")" << messaget::endl << messaget::eom;
719719
else
720720
{
721721
goto_trace_stept &trace_step=steps.get_last_step();
@@ -769,8 +769,8 @@ void interpretert::assign(
769769
{
770770
memory_cellt &cell=memory[integer2unsigned(address)];
771771
if(show) {
772-
status() << "** assigning " << cell.identifier << "["
773-
<< cell.offset << "]:=" << rhs[i] << messaget::endl << eom;
772+
message->status() << "** assigning " << cell.identifier << "["
773+
<< cell.offset << "]:=" << rhs[i] << messaget::endl << messaget::eom;
774774
}
775775
cell.value=rhs[i];
776776
if(cell.initialised==0) cell.initialised=1;
@@ -815,7 +815,7 @@ void interpretert::execute_assert()
815815
if ((targetAssert==PC) || stop_on_assertion)
816816
throw "assertion failed";
817817
else if (show)
818-
error() << "assertion failed" << messaget::endl << eom;
818+
message->error() << "assertion failed" << messaget::endl << messaget::eom;
819819
}
820820
}
821821

@@ -939,7 +939,7 @@ void interpretert::execute_function_call()
939939
return;
940940
}
941941
if (show)
942-
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)
942+
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)
943943
}
944944
}
945945

@@ -1019,7 +1019,7 @@ void interpretert::build_memory_map(const symbolt &symbol)
10191019
}
10201020
}
10211021

1022-
typet interpretert::concretise_type(const typet &type)
1022+
typet interpretert::concretise_type(const typet &type) const
10231023
{
10241024
if(type.id()==ID_array)
10251025
{
@@ -1050,7 +1050,7 @@ Function: interpretert::build_memory_map
10501050
Purpose:
10511051
10521052
\*******************************************************************/
1053-
mp_integer interpretert::build_memory_map(const irep_idt &id,const typet &type)
1053+
mp_integer interpretert::build_memory_map(const irep_idt &id,const typet &type) const
10541054
{
10551055
if (dynamic_types.find(id)!=dynamic_types.end()) return memory_map[id];
10561056
typet alloc_type=concretise_type(type);
@@ -1174,13 +1174,13 @@ void interpretert::list_non_bodied() {
11741174
}
11751175
}
11761176

1177-
result() << "non bodied varibles " << funcs << messaget::endl << eom;
1177+
message->result() << "non bodied varibles " << funcs << messaget::endl << messaget::eom;
11781178
std::map<const irep_idt,const irep_idt>::const_iterator it;
11791179
/*for(it=function_input_vars.begin(); it!=function_input_vars.end(); it++)
11801180
{
1181-
message.result() << it->first << "=" << it->second.front() << messaget::endl;
1181+
message->result() << it->first << "=" << it->second.front() << messaget::endl;
11821182
}*/
1183-
result() << eom;
1183+
message->result() << messaget::eom;
11841184
}
11851185

11861186
char interpretert::is_opaque_function(const goto_programt::instructionst::const_iterator &it, irep_idt &id)
@@ -1365,10 +1365,10 @@ void interpretert::print_inputs() {
13651365
list_inputs();
13661366
for(input_varst::iterator it=input_vars.begin();it!=input_vars.end();
13671367
it++) {
1368-
result() << it->first << "=" << from_expr(ns, it->first, it->second)
1369-
<< "[" << it->second.type().id() << "]" << messaget::endl << eom;
1368+
message->result() << it->first << "=" << from_expr(ns, it->first, it->second)
1369+
<< "[" << it->second.type().id() << "]" << messaget::endl << messaget::eom;
13701370
}
1371-
result() << eom;
1371+
message->result() << messaget::eom;
13721372
}
13731373

13741374
/*******************************************************************
@@ -1385,10 +1385,10 @@ void interpretert::print_memory(bool input_flags) {
13851385
for(unsigned i=0;i<memory.size();i++)
13861386
{
13871387
memory_cellt &cell=memory[i];
1388-
debug() << cell.identifier << "[" << cell.offset << "]"
1389-
<< "=" << cell.value << eom;
1390-
if(input_flags) debug() << "(" << (int)cell.initialised << ")" << eom;
1391-
debug() << messaget::endl << eom;
1388+
message->debug() << cell.identifier << "[" << cell.offset << "]"
1389+
<< "=" << cell.value << messaget::eom;
1390+
if(input_flags) message->debug() << "(" << (int)cell.initialised << ")" << messaget::eom;
1391+
message->debug() << messaget::endl << messaget::eom;
13921392
}
13931393
}
13941394

@@ -1467,7 +1467,7 @@ void interpretert::prune_inputs(input_varst &inputs,list_input_varst& function_i
14671467
}
14681468
catch (const char *e)
14691469
{
1470-
error() << e << messaget::endl << eom;
1470+
message->error() << e << messaget::endl << messaget::eom;
14711471
}
14721472
list_inputs();
14731473
list_inputs(inputs);
@@ -1687,8 +1687,8 @@ void interpretert::get_value_tree(const irep_idt& capture_symbol,
16871687
auto findit=inputs.find(capture_symbol);
16881688
if(findit==inputs.end())
16891689
{
1690-
error() << "Stub method returned without defining " << capture_symbol
1691-
<< ". Did the program trace end inside a stub?\n" << eom;
1690+
message->error() << "Stub method returned without defining " << capture_symbol
1691+
<< ". Did the program trace end inside a stub?\n" << messaget::eom;
16921692
return;
16931693
}
16941694

@@ -1873,7 +1873,7 @@ Function: interpreter
18731873
void interpreter(
18741874
const symbol_tablet &symbol_table,
18751875
const goto_functionst &goto_functions,
1876-
message_handlert &message_handler)
1876+
messaget *message_handler)
18771877
{
18781878
interpretert interpreter(symbol_table,goto_functions,message_handler);
18791879
interpreter();

src/goto-programs/interpreter.h

+1-1
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

+11-9
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()();
@@ -61,6 +62,7 @@ class interpretert:public messaget
6162
const symbol_tablet &symbol_table;
6263
const namespacet ns;
6364
const goto_functionst &goto_functions;
65+
messaget *message;
6466
mutable dynamic_typest dynamic_types;
6567
mutable memory_mapt memory_map;
6668

@@ -80,8 +82,8 @@ class interpretert:public messaget
8082

8183
void build_memory_map();
8284
void build_memory_map(const symbolt &symbol);
83-
mp_integer build_memory_map(const irep_idt &id,const typet &type);
84-
typet concretise_type(const typet &type);
85+
mp_integer build_memory_map(const irep_idt &id,const typet &type) const;
86+
typet concretise_type(const typet &type) const;
8587
unsigned get_size(const typet &type) const;
8688

8789
irep_idt get_component_id(const irep_idt &object,unsigned offset);
@@ -146,7 +148,7 @@ class interpretert:public messaget
146148
int stack_depth;
147149
int thread_id;
148150

149-
bool evaluate_boolean(const exprt &expr)
151+
bool evaluate_boolean(const exprt &expr) const
150152
{
151153
std::vector<mp_integer> v;
152154
evaluate(expr, v);
@@ -165,9 +167,9 @@ class interpretert:public messaget
165167

166168
void evaluate(
167169
const exprt &expr,
168-
std::vector<mp_integer> &dest);
170+
std::vector<mp_integer> &dest) const;
169171

170-
mp_integer evaluate_address(const exprt &expr, bool fail_quietly=false);
172+
mp_integer evaluate_address(const exprt &expr, bool fail_quietly=false) const;
171173

172174
void initialise(bool init);
173175
void show_state();

src/goto-programs/interpreter_evaluate.cpp

+12-12
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 <<"interpreter::malloc_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
{
@@ -850,10 +850,10 @@ void interpretert::evaluate(
850850
return;
851851
}
852852
// if (!show) return;
853-
error() << "!! failed to evaluate expression: "
853+
message->error() << "!! failed to evaluate expression: "
854854
<< from_expr(ns, function->first, expr)
855-
<< messaget::endl << eom;
856-
error() << expr.id() << "[" << expr.type().id() << "]" << messaget::endl << eom;
855+
<< messaget::endl << messaget::eom;
856+
message->error() << expr.id() << "[" << expr.type().id() << "]" << messaget::endl << messaget::eom;
857857
}
858858

859859
/*******************************************************************\
@@ -868,7 +868,7 @@ Function: interpretert::evaluate_address
868868
869869
\*******************************************************************/
870870

871-
mp_integer interpretert::evaluate_address(const exprt &expr, bool fail_quietly)
871+
mp_integer interpretert::evaluate_address(const exprt &expr, bool fail_quietly) const
872872
{
873873
if(expr.id()==ID_symbol)
874874
{
@@ -982,9 +982,9 @@ mp_integer interpretert::evaluate_address(const exprt &expr, bool fail_quietly)
982982

983983
if(!fail_quietly)
984984
{
985-
error() << "!! failed to evaluate address: "
986-
<< from_expr(ns, function->first, expr)
987-
<< messaget::endl << eom;
985+
message->error() << "!! failed to evaluate address: "
986+
<< from_expr(ns, function->first, expr)
987+
<< messaget::eom;
988988
}
989989

990990
return 0;

src/test_gen/java_test_case_generator.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ inputst java_test_case_generatort::generate_inputs(const symbol_tablet &st,
2727
interpretert::input_var_functionst& first_assignments,
2828
interpretert::dynamic_typest& dynamic_types)
2929
{
30-
interpretert interpreter(st, gf, get_message_handler());
30+
interpretert interpreter(st, gf, this);
3131
inputst res(interpreter.load_counter_example_inputs(trace, opaque_function_returns));
3232
for (inputst::const_iterator it(res.begin()); it != res.end();)
3333
if (is_meta(it->first)) it=res.erase(it);

0 commit comments

Comments
 (0)