Skip to content

Commit 72ad6ad

Browse files
romainbrenguierJoel Allred
authored and
Joel Allred
committed
Making add_string_type more generic
The class_name is now passed as argument so that we can reuse this function for StringBuilder and other "String-like" classes.
1 parent e81a5e0 commit 72ad6ad

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/java_bytecode/java_bytecode_convert_class.cpp

+19-8
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,16 @@ class java_bytecode_convert_classt:public messaget
5050
convert(parse_tree.parsed_class);
5151
else if(string_refinement_enabled &&
5252
parse_tree.parsed_class.name=="java.lang.String")
53-
add_string_type();
53+
add_string_type("java.lang.String");
54+
else if(string_refinement_enabled &&
55+
parse_tree.parsed_class.name=="java.lang.StringBuilder")
56+
add_string_type("java.lang.StringBuilder");
57+
else if(string_refinement_enabled &&
58+
parse_tree.parsed_class.name=="java.lang.CharSequence")
59+
add_string_type("java.lang.CharSequence");
60+
else if(string_refinement_enabled &&
61+
parse_tree.parsed_class.name=="java.lang.StringBuffer")
62+
add_string_type("java.lang.StringBuffer");
5463
else
5564
generate_class_stub(parse_tree.parsed_class.name);
5665
}
@@ -72,7 +81,7 @@ class java_bytecode_convert_classt:public messaget
7281

7382
void generate_class_stub(const irep_idt &class_name);
7483
void add_array_types();
75-
void add_string_type();
84+
void add_string_type(const irep_idt &class_name);
7685
};
7786

7887
/*******************************************************************\
@@ -406,15 +415,17 @@ bool java_bytecode_convert_class(
406415
407416
Function: java_bytecode_convert_classt::add_string_type
408417
418+
Inputs: a name for the class such as "java.lang.String"
419+
409420
Purpose: Implements the java.lang.String type in the case that
410421
we provide an internal implementation.
411422
412423
\*******************************************************************/
413424

414-
void java_bytecode_convert_classt::add_string_type()
425+
void java_bytecode_convert_classt::add_string_type(const irep_idt &class_name)
415426
{
416427
class_typet string_type;
417-
string_type.set_tag("java.lang.String");
428+
string_type.set_tag(class_name);
418429
string_type.components().resize(3);
419430
string_type.components()[0].set_name("@java.lang.Object");
420431
string_type.components()[0].set_pretty_name("@java.lang.Object");
@@ -432,8 +443,8 @@ void java_bytecode_convert_classt::add_string_type()
432443
string_type.add_base(symbol_typet("java::java.lang.Object"));
433444

434445
symbolt string_symbol;
435-
string_symbol.name="java::java.lang.String";
436-
string_symbol.base_name="java.lang.String";
446+
string_symbol.name="java::"+id2string(class_name);
447+
string_symbol.base_name=id2string(class_name);
437448
string_symbol.type=string_type;
438449
string_symbol.is_type=true;
439450

@@ -445,8 +456,8 @@ void java_bytecode_convert_classt::add_string_type()
445456
symbolt string_equals_symbol;
446457
string_equals_symbol.name=
447458
"java::java.lang.String.equals:(Ljava/lang/Object;)Z";
448-
string_equals_symbol.base_name="java.lang.String.equals";
449-
string_equals_symbol.pretty_name="java.lang.String.equals";
459+
string_equals_symbol.base_name=id2string(class_name)+".equals";
460+
string_equals_symbol.pretty_name=id2string(class_name)+".equals";
450461
string_equals_symbol.mode=ID_java;
451462

452463
code_typet string_equals_type;

0 commit comments

Comments
 (0)