Skip to content

Commit 5c6d69c

Browse files
Make get_user_specified_clinit_body json arg non optional
No user specified static initializer should appear if the static-values is not set anyway. So this if condition can be replaced by an invariant at the call site.
1 parent 07645e5 commit 5c6d69c

File tree

3 files changed

+37
-38
lines changed

3 files changed

+37
-38
lines changed

jbmc/src/java_bytecode/java_bytecode_language.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1210,9 +1210,11 @@ bool java_bytecode_languaget::convert_single_method(
12101210
declaring_class(symbol_table.lookup_ref(function_id));
12111211
INVARIANT(
12121212
class_name, "user_specified_clinit must be declared by a class.");
1213+
INVARIANT(
1214+
static_values_json.has_value(), "static-values JSON must be available");
12131215
writable_symbol.value = get_user_specified_clinit_body(
12141216
*class_name,
1215-
static_values_json,
1217+
*static_values_json,
12161218
symbol_table,
12171219
get_message_handler(),
12181220
needed_lazy_methods,

jbmc/src/java_bytecode/java_static_initializers.cpp

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -769,57 +769,54 @@ code_ifthenelset get_clinit_wrapper_body(
769769

770770
code_blockt get_user_specified_clinit_body(
771771
const irep_idt &class_id,
772-
const optionalt<json_objectt> &static_values_json,
772+
const json_objectt &static_values_json,
773773
symbol_table_baset &symbol_table,
774774
message_handlert &message_handler,
775775
optionalt<ci_lazy_methods_neededt> needed_lazy_methods,
776776
size_t max_user_array_length,
777777
std::unordered_map<std::string, object_creation_referencet> &references)
778778
{
779779
const irep_idt &real_clinit_name = clinit_function_name(class_id);
780-
if(static_values_json.has_value())
780+
const auto class_entry =
781+
static_values_json.find(id2string(strip_java_namespace_prefix(class_id)));
782+
if(class_entry != static_values_json.end())
781783
{
782-
const auto class_entry =
783-
static_values_json->find(id2string(strip_java_namespace_prefix(class_id)));
784-
if(class_entry != static_values_json->end())
784+
const auto &class_json_value = class_entry->second;
785+
if(class_json_value.is_object())
785786
{
786-
const auto &class_json_value = class_entry->second;
787-
if(class_json_value.is_object())
787+
const auto &class_json_object = to_json_object(class_json_value);
788+
std::map<symbol_exprt, jsont> static_field_values;
789+
for(const auto &symbol_pair : symbol_table)
788790
{
789-
const auto &class_json_object = to_json_object(class_json_value);
790-
std::map<symbol_exprt, jsont> static_field_values;
791-
for(const auto &symbol_pair : symbol_table)
791+
const symbolt &symbol = symbol_pair.second;
792+
if(
793+
declaring_class(symbol) && *declaring_class(symbol) == class_id &&
794+
symbol.is_static_lifetime)
792795
{
793-
const symbolt &symbol = symbol_pair.second;
794-
if(
795-
declaring_class(symbol) && *declaring_class(symbol) == class_id &&
796-
symbol.is_static_lifetime)
796+
const symbol_exprt &static_field_expr = symbol.symbol_expr();
797+
const auto &static_field_entry =
798+
class_json_object.find(id2string(symbol.base_name));
799+
if(static_field_entry != class_json_object.end())
797800
{
798-
const symbol_exprt &static_field_expr = symbol.symbol_expr();
799-
const auto &static_field_entry =
800-
class_json_object.find(id2string(symbol.base_name));
801-
if(static_field_entry != class_json_object.end())
802-
{
803-
static_field_values.insert(
804-
{static_field_expr, static_field_entry->second});
805-
}
801+
static_field_values.insert(
802+
{static_field_expr, static_field_entry->second});
806803
}
807804
}
808-
code_blockt body;
809-
for(const auto &value_pair : static_field_values)
810-
{
811-
assign_from_json(
812-
value_pair.first,
813-
value_pair.second,
814-
real_clinit_name,
815-
body,
816-
symbol_table,
817-
needed_lazy_methods,
818-
max_user_array_length,
819-
references);
820-
}
821-
return body;
822805
}
806+
code_blockt body;
807+
for(const auto &value_pair : static_field_values)
808+
{
809+
assign_from_json(
810+
value_pair.first,
811+
value_pair.second,
812+
real_clinit_name,
813+
body,
814+
symbol_table,
815+
needed_lazy_methods,
816+
max_user_array_length,
817+
references);
818+
}
819+
return body;
823820
}
824821
}
825822
if(const auto clinit_func = symbol_table.lookup(real_clinit_name))

jbmc/src/java_bytecode/java_static_initializers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ code_ifthenelset get_clinit_wrapper_body(
7676
/// \return the body of the user_specified_clinit function as a code block.
7777
code_blockt get_user_specified_clinit_body(
7878
const irep_idt &class_id,
79-
const optionalt<json_objectt> &static_values_json,
79+
const json_objectt &static_values_json,
8080
symbol_table_baset &symbol_table,
8181
message_handlert &message_handler,
8282
optionalt<ci_lazy_methods_neededt> needed_lazy_methods,

0 commit comments

Comments
 (0)