Skip to content

Commit 2cf1931

Browse files
Merge pull request diffblue#2661 from jeannielynnmoulton/jeannie/JavaMethodType
Change `code_typet` to `java_method_typet` in JBMC
2 parents 0ee4178 + 4dca215 commit 2cf1931

34 files changed

+400
-327
lines changed

jbmc/src/java_bytecode/ci_lazy_methods.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ void ci_lazy_methodst::initialize_instantiated_classes(
376376
for(const auto &mname : entry_points)
377377
{
378378
const auto &symbol=ns.lookup(mname);
379-
const auto &mtype=to_code_type(symbol.type);
379+
const auto &mtype = to_java_method_type(symbol.type);
380380
for(const auto &param : mtype.parameters())
381381
{
382382
if(param.type().id()==ID_pointer)

jbmc/src/java_bytecode/expr2java.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,10 @@ std::string expr2javat::convert_code_function_call(
5656
dest+='=';
5757
}
5858

59-
const code_typet &code_type=
60-
to_code_type(src.function().type());
59+
const java_method_typet &method_type =
60+
to_java_method_type(src.function().type());
6161

62-
bool has_this=code_type.has_this() &&
63-
!src.arguments().empty();
62+
bool has_this = method_type.has_this() && !src.arguments().empty();
6463

6564
if(has_this)
6665
{
@@ -284,7 +283,7 @@ std::string expr2javat::convert_rec(
284283
return q+"byte"+d;
285284
else if(src.id()==ID_code)
286285
{
287-
const code_typet &code_type=to_code_type(src);
286+
const java_method_typet &method_type = to_java_method_type(src);
288287

289288
// Java doesn't really have syntax for function types,
290289
// so we make one up, loosely inspired by the syntax
@@ -293,11 +292,10 @@ std::string expr2javat::convert_rec(
293292
std::string dest="";
294293

295294
dest+='(';
296-
const code_typet::parameterst &parameters=code_type.parameters();
295+
const java_method_typet::parameterst &parameters = method_type.parameters();
297296

298-
for(code_typet::parameterst::const_iterator
299-
it=parameters.begin();
300-
it!=parameters.end();
297+
for(java_method_typet::parameterst::const_iterator it = parameters.begin();
298+
it != parameters.end();
301299
it++)
302300
{
303301
if(it!=parameters.begin())
@@ -306,7 +304,7 @@ std::string expr2javat::convert_rec(
306304
dest+=convert(it->type());
307305
}
308306

309-
if(code_type.has_ellipsis())
307+
if(method_type.has_ellipsis())
310308
{
311309
if(!parameters.empty())
312310
dest+=", ";
@@ -315,7 +313,7 @@ std::string expr2javat::convert_rec(
315313

316314
dest+=')';
317315

318-
const typet &return_type=code_type.return_type();
316+
const typet &return_type = method_type.return_type();
319317
dest+=" -> "+convert(return_type);
320318

321319
return q + dest;

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -781,12 +781,12 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
781781

782782
const irep_idt clone_name=
783783
id2string(symbol_type_identifier)+".clone:()Ljava/lang/Object;";
784-
code_typet::parametert this_param;
784+
java_method_typet::parametert this_param;
785785
this_param.set_identifier(id2string(clone_name)+"::this");
786786
this_param.set_base_name("this");
787787
this_param.set_this();
788788
this_param.type()=java_reference_type(symbol_type);
789-
const code_typet clone_type({this_param}, java_lang_object_type());
789+
const java_method_typet clone_type({this_param}, java_lang_object_type());
790790

791791
parameter_symbolt this_symbol;
792792
this_symbol.name=this_param.get_identifier();

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ class patternt
8787
/// parameters, which are initially nameless as method conversion hasn't
8888
/// happened. Also creates symbols in `symbol_table`.
8989
static void assign_parameter_names(
90-
code_typet &ftype,
90+
java_method_typet &ftype,
9191
const irep_idt &name_prefix,
9292
symbol_table_baset &symbol_table)
9393
{
94-
code_typet::parameterst &parameters=ftype.parameters();
94+
java_method_typet::parameterst &parameters = ftype.parameters();
9595

9696
// Mostly borrowed from java_bytecode_convert.cpp; maybe factor this out.
9797
// assign names to parameters
@@ -255,7 +255,7 @@ const exprt java_bytecode_convert_methodt::variable(
255255
/// message handler to collect warnings
256256
/// \return
257257
/// the constructed member type
258-
code_typet member_type_lazy(
258+
java_method_typet member_type_lazy(
259259
const std::string &descriptor,
260260
const optionalt<std::string> &signature,
261261
const std::string &class_name,
@@ -282,10 +282,11 @@ code_typet member_type_lazy(
282282
signature.value(),
283283
class_name);
284284
INVARIANT(member_type_from_signature.id()==ID_code, "Must be code type");
285-
if(to_code_type(member_type_from_signature).parameters().size()==
286-
to_code_type(member_type_from_descriptor).parameters().size())
285+
if(
286+
to_java_method_type(member_type_from_signature).parameters().size() ==
287+
to_java_method_type(member_type_from_descriptor).parameters().size())
287288
{
288-
return to_code_type(member_type_from_signature);
289+
return to_java_method_type(member_type_from_signature);
289290
}
290291
else
291292
{
@@ -306,7 +307,7 @@ code_typet member_type_lazy(
306307
<< message.eom;
307308
}
308309
}
309-
return to_code_type(member_type_from_descriptor);
310+
return to_java_method_type(member_type_from_descriptor);
310311
}
311312

312313
/// Retrieves the symbol of the lambda method associated with the given
@@ -345,7 +346,7 @@ void java_bytecode_convert_method_lazy(
345346
{
346347
symbolt method_symbol;
347348

348-
code_typet member_type = member_type_lazy(
349+
java_method_typet member_type = member_type_lazy(
349350
m.descriptor,
350351
m.signature,
351352
id2string(class_symbol.name),
@@ -378,8 +379,8 @@ void java_bytecode_convert_method_lazy(
378379
// do we need to add 'this' as a parameter?
379380
if(!m.is_static)
380381
{
381-
code_typet::parameterst &parameters = member_type.parameters();
382-
code_typet::parametert this_p;
382+
java_method_typet::parameterst &parameters = member_type.parameters();
383+
java_method_typet::parametert this_p;
383384
const reference_typet object_ref_type=
384385
java_reference_type(symbol_typet(class_symbol.name));
385386
this_p.type()=object_ref_type;
@@ -442,12 +443,12 @@ void java_bytecode_convert_methodt::convert(
442443

443444
symbolt &method_symbol=*symbol_table.get_writeable(method_identifier);
444445

445-
// Obtain a std::vector of code_typet::parametert objects from the
446+
// Obtain a std::vector of java_method_typet::parametert objects from the
446447
// (function) type of the symbol
447448
java_method_typet method_type = to_java_method_type(method_symbol.type);
448449
method_type.set(ID_C_class, class_symbol.name);
449450
method_return_type = method_type.return_type();
450-
code_typet::parameterst &parameters = method_type.parameters();
451+
java_method_typet::parameterst &parameters = method_type.parameters();
451452

452453
// Determine the number of local variable slots used by the JVM to maintain
453454
// the formal parameters
@@ -1250,9 +1251,10 @@ codet java_bytecode_convert_methodt::convert_instructions(
12501251
id2string(arg0.get(ID_identifier))==
12511252
"java::org.cprover.CProver.assume:(Z)V")
12521253
{
1253-
const code_typet &code_type=to_code_type(arg0.type());
1254-
INVARIANT(code_type.parameters().size()==1,
1255-
"function expected to have exactly one parameter");
1254+
const java_method_typet &method_type = to_java_method_type(arg0.type());
1255+
INVARIANT(
1256+
method_type.parameters().size() == 1,
1257+
"function expected to have exactly one parameter");
12561258
c = replace_call_to_cprover_assume(i_it->source_location, c);
12571259
}
12581260
// replace calls to CProver.atomicBegin
@@ -1995,8 +1997,8 @@ codet java_bytecode_convert_methodt::convert_monitorenterexit(
19951997
return code_skipt();
19961998

19971999
// becomes a function call
1998-
code_typet type(
1999-
{code_typet::parametert(java_reference_type(void_typet()))},
2000+
java_method_typet type(
2001+
{java_method_typet::parametert(java_reference_type(void_typet()))},
20002002
void_typet());
20012003
code_function_callt call;
20022004
call.function() = symbol_exprt(descriptor, type);
@@ -2105,8 +2107,8 @@ void java_bytecode_convert_methodt::convert_invoke(
21052107
const bool is_virtual(
21062108
statement == "invokevirtual" || statement == "invokeinterface");
21072109

2108-
code_typet &code_type = to_code_type(arg0.type());
2109-
code_typet::parameterst &parameters(code_type.parameters());
2110+
java_method_typet &method_type = to_java_method_type(arg0.type());
2111+
java_method_typet::parameterst &parameters(method_type.parameters());
21102112

21112113
if(use_this)
21122114
{
@@ -2122,13 +2124,13 @@ void java_bytecode_convert_methodt::convert_invoke(
21222124
{
21232125
if(needed_lazy_methods)
21242126
needed_lazy_methods->add_needed_class(classname);
2125-
code_type.set_is_constructor();
2127+
method_type.set_is_constructor();
21262128
}
21272129
else
2128-
code_type.set(ID_java_super_method_call, true);
2130+
method_type.set(ID_java_super_method_call, true);
21292131
}
21302132
reference_typet object_ref_type = java_reference_type(thistype);
2131-
code_typet::parametert this_p(object_ref_type);
2133+
java_method_typet::parametert this_p(object_ref_type);
21322134
this_p.set_this();
21332135
this_p.set_base_name("this");
21342136
parameters.insert(parameters.begin(), this_p);
@@ -2170,7 +2172,7 @@ void java_bytecode_convert_methodt::convert_invoke(
21702172

21712173
// do some type adjustment for return values
21722174

2173-
const typet &return_type = code_type.return_type();
2175+
const typet &return_type = method_type.return_type();
21742176

21752177
if(return_type.id() != ID_empty)
21762178
{
@@ -2215,7 +2217,7 @@ void java_bytecode_convert_methodt::convert_invoke(
22152217
symbol.value.make_nil();
22162218
symbol.mode = ID_java;
22172219
assign_parameter_names(
2218-
to_code_type(symbol.type), symbol.name, symbol_table);
2220+
to_java_method_type(symbol.type), symbol.name, symbol_table);
22192221

22202222
debug() << "Generating codet: new opaque symbol: method '" << symbol.name
22212223
<< "'" << eom;
@@ -2945,11 +2947,11 @@ optionalt<exprt> java_bytecode_convert_methodt::convert_invoke_dynamic(
29452947
const source_locationt &location,
29462948
const exprt &arg0)
29472949
{
2948-
const code_typet &code_type = to_code_type(arg0.type());
2950+
const java_method_typet &method_type = to_java_method_type(arg0.type());
29492951

29502952
const optionalt<symbolt> &lambda_method_symbol = get_lambda_method_symbol(
29512953
lambda_method_handles,
2952-
code_type.get_int(ID_java_lambda_method_handle_index));
2954+
method_type.get_int(ID_java_lambda_method_handle_index));
29532955
if(lambda_method_symbol.has_value())
29542956
debug() << "Converting invokedynamic for lambda: "
29552957
<< lambda_method_symbol.value().name << eom;
@@ -2958,11 +2960,11 @@ optionalt<exprt> java_bytecode_convert_methodt::convert_invoke_dynamic(
29582960
"type"
29592961
<< eom;
29602962

2961-
const code_typet::parameterst &parameters(code_type.parameters());
2963+
const java_method_typet::parameterst &parameters(method_type.parameters());
29622964

29632965
pop(parameters.size());
29642966

2965-
const typet &return_type = code_type.return_type();
2967+
const typet &return_type = method_type.return_type();
29662968

29672969
if(return_type.id() == ID_empty)
29682970
return {};
@@ -3019,13 +3021,13 @@ void java_bytecode_initialize_parameter_names(
30193021
&local_variable_table,
30203022
symbol_table_baset &symbol_table)
30213023
{
3022-
// Obtain a std::vector of code_typet::parametert objects from the
3024+
// Obtain a std::vector of java_method_typet::parametert objects from the
30233025
// (function) type of the symbol
3024-
code_typet &code_type = to_code_type(method_symbol.type);
3025-
code_typet::parameterst &parameters = code_type.parameters();
3026+
java_method_typet &method_type = to_java_method_type(method_symbol.type);
3027+
java_method_typet::parameterst &parameters = method_type.parameters();
30263028

30273029
// Find number of parameters
3028-
unsigned slots_for_parameters = java_method_parameter_slots(code_type);
3030+
unsigned slots_for_parameters = java_method_parameter_slots(method_type);
30293031

30303032
// Find parameter names in the local variable table:
30313033
typedef std::pair<irep_idt, irep_idt> base_name_and_identifiert;

jbmc/src/java_bytecode/java_bytecode_instrument.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,8 +446,8 @@ void java_bytecode_instrumentt::instrument_code(codet &code)
446446
add_expr_instrumentation(block, code_function_call.lhs());
447447
add_expr_instrumentation(block, code_function_call.function());
448448

449-
const code_typet &function_type=
450-
to_code_type(code_function_call.function().type());
449+
const java_method_typet &function_type =
450+
to_java_method_type(code_function_call.function().type());
451451

452452
// Check for a null this-argument of a virtual call:
453453
if(function_type.has_this())

jbmc/src/java_bytecode/java_bytecode_language.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1068,7 +1068,7 @@ bool java_bytecode_languaget::convert_single_method(
10681068

10691069
// The return of an opaque function is a source of an otherwise invisible
10701070
// instantiation, so here we ensure we've loaded the appropriate classes.
1071-
const code_typet function_type = to_code_type(symbol.type);
1071+
const java_method_typet function_type = to_java_method_type(symbol.type);
10721072
if(
10731073
const pointer_typet *pointer_return_type =
10741074
type_try_dynamic_cast<pointer_typet>(function_type.return_type()))

jbmc/src/java_bytecode/java_bytecode_parser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ void java_bytecode_parsert::get_class_refs_rec(const typet &src)
610610
{
611611
if(src.id()==ID_code)
612612
{
613-
const code_typet &ct=to_code_type(src);
613+
const java_method_typet &ct = to_java_method_type(src);
614614
const typet &rt=ct.return_type();
615615
get_class_refs_rec(rt);
616616
for(const auto &p : ct.parameters())

jbmc/src/java_bytecode/java_bytecode_typecheck.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ Author: Daniel Kroening, [email protected]
1212
#ifndef CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_TYPECHECK_H
1313
#define CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_TYPECHECK_H
1414

15+
#include "java_types.h"
16+
1517
#include <set>
1618
#include <map>
1719

jbmc/src/java_bytecode/java_bytecode_typecheck_type.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,14 @@ void java_bytecode_typecheckt::typecheck_type(typet &type)
3838
}
3939
else if(type.id()==ID_code)
4040
{
41-
code_typet &code_type=to_code_type(type);
42-
typecheck_type(code_type.return_type());
41+
java_method_typet &method_type = to_java_method_type(type);
42+
typecheck_type(method_type.return_type());
4343

44-
code_typet::parameterst &parameters=code_type.parameters();
44+
java_method_typet::parameterst &parameters = method_type.parameters();
4545

46-
for(code_typet::parameterst::iterator
47-
it=parameters.begin(); it!=parameters.end(); it++)
46+
for(java_method_typet::parameterst::iterator it = parameters.begin();
47+
it != parameters.end();
48+
it++)
4849
typecheck_type(it->type());
4950
}
5051
}

0 commit comments

Comments
 (0)