Skip to content

Commit 78d181a

Browse files
committed
Add string symbol creation function that takes a string
This simplifies the code in a few places, since we don't have to repeat the same lines of constructing the string literal exprt every time.
1 parent 42a4d87 commit 78d181a

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

jbmc/src/java_bytecode/java_entry_point.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,10 @@ static void java_static_lifetime_init(
135135
// and we can refer to them later when we initialize input values.
136136
for(const auto &val : object_factory_parameters.string_input_values)
137137
{
138-
exprt my_literal(ID_java_string_literal);
139-
my_literal.set(ID_value, val);
140138
// We ignore the return value of the following call, we just need to
141139
// make sure the string is in the symbol table.
142140
get_or_create_string_literal_symbol(
143-
my_literal,
144-
symbol_table,
145-
string_refinement_enabled);
141+
val, symbol_table, string_refinement_enabled);
146142
}
147143

148144
// We need to zero out all static variables, or nondet-initialize if they're
@@ -174,15 +170,13 @@ static void java_static_lifetime_init(
174170

175171
bool class_is_array = is_java_array_tag(sym.name);
176172

177-
exprt name_literal(ID_java_string_literal);
178-
name_literal.set(ID_value, to_class_type(class_symbol.type).get_tag());
179-
180173
journalling_symbol_tablet journalling_table =
181174
journalling_symbol_tablet::wrap(symbol_table);
182175

183-
symbol_exprt class_name_literal =
184-
get_or_create_string_literal_symbol(
185-
name_literal, journalling_table, string_refinement_enabled);
176+
symbol_exprt class_name_literal = get_or_create_string_literal_symbol(
177+
to_class_type(class_symbol.type).get_tag(),
178+
journalling_table,
179+
string_refinement_enabled);
186180

187181
// If that created any new symbols make sure we initialise those too:
188182
const auto &new_symbols = journalling_table.get_inserted();

jbmc/src/java_bytecode/java_object_factory.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -731,10 +731,8 @@ alternate_casest get_string_input_values_code(
731731
alternate_casest cases;
732732
for(const auto &val : string_input_values)
733733
{
734-
exprt name_literal(ID_java_string_literal);
735-
name_literal.set(ID_value, val);
736734
const symbol_exprt s =
737-
get_or_create_string_literal_symbol(name_literal, symbol_table, true);
735+
get_or_create_string_literal_symbol(val, symbol_table, true);
738736
cases.push_back(code_assignt(expr, s));
739737
}
740738
return cases;

jbmc/src/java_bytecode/java_string_literals.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,14 @@ symbol_exprt get_or_create_string_literal_symbol(
207207

208208
return new_symbol.symbol_expr();
209209
}
210+
211+
symbol_exprt get_or_create_string_literal_symbol(
212+
const irep_idt &string_value,
213+
symbol_table_baset &symbol_table,
214+
bool string_refinement_enabled)
215+
{
216+
exprt literal{ID_java_string_literal};
217+
literal.set(ID_value, string_value);
218+
return get_or_create_string_literal_symbol(
219+
literal, symbol_table, string_refinement_enabled);
220+
}

jbmc/src/java_bytecode/java_string_literals.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,12 @@ symbol_exprt get_or_create_string_literal_symbol(
2525
symbol_table_baset &symbol_table,
2626
bool string_refinement_enabled);
2727

28+
/// Same as \ref
29+
/// get_or_create_string_literal_symbol(const exprt&, symbol_table_baset&, bool)
30+
/// except it takes an id/string parameter rather than a string literal exprt.
31+
symbol_exprt get_or_create_string_literal_symbol(
32+
const irep_idt &string_value,
33+
symbol_table_baset &symbol_table,
34+
bool string_refinement_enabled);
35+
2836
#endif

0 commit comments

Comments
 (0)