Skip to content

Commit 055f515

Browse files
Matthias Güdemannpeterschrammel
Matthias Güdemann
authored andcommitted
extend java_bytecode for test-gen-support
1 parent 8236166 commit 055f515

10 files changed

+627
-172
lines changed

src/java_bytecode/java_bytecode_convert_method.cpp

+59
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,56 @@ class patternt
5454
const char *p;
5555
};
5656

57+
/*******************************************************************\
58+
59+
Function: assign_parameter_names
60+
61+
Inputs: `ftype`: Function type whose parameters should be named
62+
`name_prefix`: Prefix for parameter names, typically the
63+
parent function's name.
64+
`symbol_table`: Global symbol table
65+
66+
Outputs: Assigns parameter names (side-effects on `ftype`) to
67+
function stub parameters, which are initially nameless
68+
as method conversion hasn't happened.
69+
Also creates symbols in `symbol_table`.
70+
71+
Purpose: See above
72+
73+
\*******************************************************************/
74+
75+
void assign_parameter_names(
76+
code_typet &ftype,
77+
const irep_idt &name_prefix,
78+
symbol_tablet &symbol_table)
79+
{
80+
code_typet::parameterst &parameters=ftype.parameters();
81+
82+
// Mostly borrowed from java_bytecode_convert.cpp; maybe factor this out.
83+
// assign names to parameters
84+
for(std::size_t i=0; i<parameters.size(); ++i)
85+
{
86+
irep_idt base_name, identifier;
87+
88+
if(i==0 && parameters[i].get_this())
89+
base_name="this";
90+
else
91+
base_name="stub_ignored_arg"+std::to_string(i);
92+
93+
identifier=id2string(name_prefix)+"::"+id2string(base_name);
94+
parameters[i].set_base_name(base_name);
95+
parameters[i].set_identifier(identifier);
96+
97+
// add to symbol table
98+
parameter_symbolt parameter_symbol;
99+
parameter_symbol.base_name=base_name;
100+
parameter_symbol.mode=ID_java;
101+
parameter_symbol.name=identifier;
102+
parameter_symbol.type=parameters[i].type();
103+
symbol_table.add(parameter_symbol);
104+
}
105+
}
106+
57107
static bool operator==(const irep_idt &what, const patternt &pattern)
58108
{
59109
return pattern==what;
@@ -1216,9 +1266,18 @@ codet java_bytecode_convert_methodt::convert_instructions(
12161266
symbolt symbol;
12171267
symbol.name=id;
12181268
symbol.base_name=arg0.get(ID_C_base_name);
1269+
symbol.pretty_name=
1270+
id2string(arg0.get(ID_C_class)).substr(6)+"."+
1271+
id2string(symbol.base_name)+"()";
12191272
symbol.type=arg0.type();
12201273
symbol.value.make_nil();
12211274
symbol.mode=ID_java;
1275+
1276+
assign_parameter_names(
1277+
to_code_type(symbol.type),
1278+
symbol.name,
1279+
symbol_table);
1280+
12221281
symbol_table.add(symbol);
12231282
}
12241283

src/java_bytecode/java_bytecode_language.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,6 @@ bool java_bytecode_languaget::final(symbol_tablet &symbol_table)
751751
*/
752752
java_internal_additions(symbol_table);
753753

754-
755754
main_function_resultt res=
756755
get_main_symbol(symbol_table, main_class, get_message_handler());
757756
if(res.stop_convert)

src/java_bytecode/java_bytecode_language.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class java_bytecode_languaget:public languaget
4848
symbol_tablet &context,
4949
const std::string &module) override;
5050

51-
bool final(
51+
virtual bool final(
5252
symbol_tablet &context) override;
5353

5454
void show_parse(std::ostream &out) override;

src/java_bytecode/java_entry_point.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,8 @@ void java_record_outputs(
289289
codet output(ID_output);
290290
output.operands().resize(2);
291291

292-
const symbolt &return_symbol=symbol_table.lookup("return'");
292+
const symbolt &return_symbol=
293+
symbol_table.lookup(JAVA_ENTRY_POINT_RETURN_SYMBOL);
293294

294295
output.op0()=
295296
address_of_exprt(
@@ -583,7 +584,7 @@ bool java_entry_point(
583584
auxiliary_symbolt return_symbol;
584585
return_symbol.mode=ID_C;
585586
return_symbol.is_static_lifetime=false;
586-
return_symbol.name="return'";
587+
return_symbol.name=JAVA_ENTRY_POINT_RETURN_SYMBOL;
587588
return_symbol.base_name="return";
588589
return_symbol.type=to_code_type(symbol.type).return_type();
589590

src/java_bytecode/java_entry_point.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,4 @@ main_function_resultt get_main_symbol(
3333
message_handlert &,
3434
bool allow_no_body=false);
3535

36-
#endif // CPROVER_JAVA_BYTECODE_JAVA_ENTRY_POINT_H
36+
#endif

0 commit comments

Comments
 (0)