Skip to content

Commit 870814e

Browse files
Make code_assign_java_string_to_string_expr append to a code argument
This avoids creating new code blocks inside already existing code blocks.
1 parent e8491a6 commit 870814e

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

src/java_bytecode/java_string_library_preprocess.cpp

+19-18
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,9 @@ exprt java_string_library_preprocesst::convert_exprt_to_string_exprt(
302302
{
303303
PRECONDITION(implements_java_char_sequence(op_to_process.type()));
304304
string_exprt string_expr=fresh_string_expr(loc, symbol_table, init_code);
305-
init_code.add(code_assign_java_string_to_string_expr(
306-
string_expr, op_to_process, symbol_table));
305+
code_assign_java_string_to_string_expr(
306+
string_expr, op_to_process, symbol_table, init_code);
307307
exprt string_expr_sym=fresh_string_expr_symbol(loc, symbol_table, init_code);
308-
init_code.add(code_declt(string_expr_sym));
309308
init_code.add(code_assignt(string_expr_sym, string_expr));
310309
return string_expr;
311310
}
@@ -781,13 +780,16 @@ codet java_string_library_preprocesst::
781780
/// \param lhs: a string expression
782781
/// \param rhs: an expression representing a java string
783782
/// \param symbol_table: symbol table
784-
/// \return return the following code:
783+
/// \param code: code block that gets appended the following code:
785784
/// ~~~~~~~~~~~~~~~~~~~~~~
786785
/// lhs.length=rhs->length
787786
/// lhs.data=*(rhs->data)
788787
/// ~~~~~~~~~~~~~~~~~~~~~~
789-
codet java_string_library_preprocesst::code_assign_java_string_to_string_expr(
790-
const string_exprt &lhs, const exprt &rhs, symbol_tablet &symbol_table)
788+
void java_string_library_preprocesst::code_assign_java_string_to_string_expr(
789+
const string_exprt &lhs,
790+
const exprt &rhs,
791+
symbol_tablet &symbol_table,
792+
code_blockt &code)
791793
{
792794
PRECONDITION(implements_java_char_sequence(rhs.type()));
793795

@@ -806,15 +808,13 @@ codet java_string_library_preprocesst::code_assign_java_string_to_string_expr(
806808
dereference_exprt rhs_data(member_data, member_data.type().subtype());
807809

808810
// Assignments
809-
code_blockt code;
810811
code.add(code_assignt(lhs.length(), rhs_length));
811812

812813
// We always assume data of a String is not null
813814
not_exprt data_not_null(equal_exprt(
814815
member_data, null_pointer_exprt(to_pointer_type(member_data.type()))));
815816
code.add(code_assumet(data_not_null));
816817
code.add(code_assignt(lhs.content(), rhs_data));
817-
return code;
818818
}
819819

820820
/// \param lhs: an expression representing a java string
@@ -1140,8 +1140,8 @@ codet java_string_library_preprocesst::make_string_to_char_array_code(
11401140

11411141
// string_expr = {this->length, this->data}
11421142
string_exprt string_expr=fresh_string_expr(loc, symbol_table, code);
1143-
code.add(code_assign_java_string_to_string_expr(
1144-
string_expr, string_argument, symbol_table));
1143+
code_assign_java_string_to_string_expr(
1144+
string_expr, string_argument, symbol_table, code);
11451145
exprt string_expr_sym=fresh_string_expr_symbol(
11461146
loc, symbol_table, code);
11471147
code.add(code_assignt(string_expr_sym, string_expr));
@@ -1391,8 +1391,11 @@ exprt java_string_library_preprocesst::make_argument_for_format(
13911391
pointer_typet string_pointer=
13921392
java_reference_type(symbol_typet("java::java.lang.String"));
13931393
typecast_exprt arg_i_as_string(arg_i, string_pointer);
1394-
code_not_null.add(code_assign_java_string_to_string_expr(
1395-
to_string_expr(field_expr), arg_i_as_string, symbol_table));
1394+
code_assign_java_string_to_string_expr(
1395+
to_string_expr(field_expr),
1396+
arg_i_as_string,
1397+
symbol_table,
1398+
code_not_null);
13961399
exprt arg_i_string_expr_sym=fresh_string_expr_symbol(
13971400
loc, symbol_table, code_not_null);
13981401
code_not_null.add(code_assignt(
@@ -1651,8 +1654,7 @@ codet java_string_library_preprocesst::make_copy_string_code(
16511654
// Assign the argument to string_expr
16521655
code_typet::parametert op=type.parameters()[0];
16531656
symbol_exprt arg0(op.get_identifier(), op.type());
1654-
code.add(code_assign_java_string_to_string_expr(
1655-
string_expr, arg0, symbol_table));
1657+
code_assign_java_string_to_string_expr(string_expr, arg0, symbol_table, code);
16561658

16571659
// Assign string_expr to string_expr_sym
16581660
exprt string_expr_sym=fresh_string_expr_symbol(loc, symbol_table, code);
@@ -1693,8 +1695,7 @@ codet java_string_library_preprocesst::make_copy_constructor_code(
16931695
// Assign argument to a string_expr
16941696
code_typet::parameterst params=type.parameters();
16951697
symbol_exprt arg1(params[1].get_identifier(), params[1].type());
1696-
code.add(code_assign_java_string_to_string_expr(
1697-
string_expr, arg1, symbol_table));
1698+
code_assign_java_string_to_string_expr(string_expr, arg1, symbol_table, code);
16981699

16991700
// Assign string_expr to symbol to keep track of it
17001701
exprt string_expr_sym=fresh_string_expr_symbol(loc, symbol_table, code);
@@ -1735,8 +1736,8 @@ codet java_string_library_preprocesst::make_string_length_code(
17351736
string_exprt str_expr=fresh_string_expr(loc, symbol_table, code);
17361737

17371738
// Assign this to str_expr
1738-
code.add(
1739-
code_assign_java_string_to_string_expr(str_expr, arg_this, symbol_table));
1739+
code_assign_java_string_to_string_expr(
1740+
str_expr, arg_this, symbol_table, code);
17401741

17411742
// Assign str_expr to str_expr_sym for that expression to be present in the
17421743
// symbol table in order to be processed by the string solver

src/java_bytecode/java_string_library_preprocess.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,11 @@ class java_string_library_preprocesst:public messaget
285285
const source_locationt &loc,
286286
symbol_tablet &symbol_table);
287287

288-
codet code_assign_java_string_to_string_expr(
289-
const string_exprt &lhs, const exprt &rhs, symbol_tablet &symbol_table);
288+
void code_assign_java_string_to_string_expr(
289+
const string_exprt &lhs,
290+
const exprt &rhs,
291+
symbol_tablet &symbol_table,
292+
code_blockt &code);
290293

291294
codet code_assign_string_literal_to_string_expr(
292295
const string_exprt &lhs,

0 commit comments

Comments
 (0)