Skip to content

Commit 7b5945b

Browse files
authored
Merge pull request #6591 from tautschnig/cleanup/symbolt
Add and use symbolt constructors
2 parents b01b9b7 + 6ac16bf commit 7b5945b

File tree

76 files changed

+345
-712
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+345
-712
lines changed

jbmc/src/java_bytecode/java_bytecode_concurrency_instrumentation.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,14 @@ static symbolt add_or_get_symbol(
4747
ns.lookup(name, psymbol);
4848
if(psymbol != nullptr)
4949
return *psymbol;
50-
symbolt new_symbol;
51-
new_symbol.name = name;
50+
symbolt new_symbol{name, type, ID_java};
5251
new_symbol.pretty_name = name;
5352
new_symbol.base_name = base_name;
54-
new_symbol.type = type;
5553
new_symbol.value = value;
5654
new_symbol.is_lvalue = true;
5755
new_symbol.is_state_var = true;
5856
new_symbol.is_static_lifetime = is_static_lifetime;
5957
new_symbol.is_thread_local = is_thread_local;
60-
new_symbol.mode = ID_java;
6158
symbol_table.add(new_symbol);
6259
return new_symbol;
6360
}

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -449,14 +449,10 @@ void java_bytecode_convert_classt::convert(
449449
}(id2string(c.name));
450450

451451
// produce class symbol
452-
symbolt new_symbol;
452+
class_type.set_name(qualified_classname);
453+
type_symbolt new_symbol{qualified_classname, class_type, ID_java};
453454
new_symbol.base_name = base_name;
454455
new_symbol.pretty_name=c.name;
455-
new_symbol.name=qualified_classname;
456-
class_type.set_name(new_symbol.name);
457-
new_symbol.type=class_type;
458-
new_symbol.mode=ID_java;
459-
new_symbol.is_type=true;
460456

461457
symbolt *class_symbol;
462458

@@ -714,23 +710,22 @@ void java_bytecode_convert_classt::convert(
714710
component.type() = field_type;
715711

716712
// Create the symbol
717-
symbolt new_symbol;
713+
symbolt new_symbol{
714+
id2string(class_symbol.name) + "." + id2string(f.name),
715+
field_type,
716+
ID_java};
718717

719718
new_symbol.is_static_lifetime=true;
720719
new_symbol.is_lvalue=true;
721720
new_symbol.is_state_var=true;
722-
new_symbol.name=id2string(class_symbol.name)+"."+id2string(f.name);
723721
new_symbol.base_name=f.name;
724-
new_symbol.type=field_type;
725722
// Provide a static field -> class link, like
726723
// java_bytecode_convert_method::convert does for method -> class.
727724
set_declaring_class(new_symbol, class_symbol.name);
728725
new_symbol.type.set(ID_C_field, f.name);
729726
new_symbol.type.set(ID_C_constant, f.is_final);
730727
new_symbol.pretty_name=id2string(class_symbol.pretty_name)+
731728
"."+id2string(f.name);
732-
new_symbol.mode=ID_java;
733-
new_symbol.is_type=false;
734729

735730
// These annotations use `ID_C_access` instead of `ID_access` like methods
736731
// to avoid type clashes in expressions like `some_static_field = 0`, where
@@ -862,12 +857,8 @@ void add_java_array_types(symbol_table_baset &symbol_table)
862857
"Constructed a new type representing a Java Array "
863858
"object that doesn't match expectations");
864859

865-
symbolt symbol;
866-
symbol.name = struct_tag_type_identifier;
860+
type_symbolt symbol{struct_tag_type_identifier, class_type, ID_java};
867861
symbol.base_name = struct_tag_type.get(ID_C_base_name);
868-
symbol.is_type=true;
869-
symbol.type = class_type;
870-
symbol.mode = ID_java;
871862
symbol_table.add(symbol);
872863

873864
// Also provide a clone method:
@@ -992,14 +983,11 @@ void add_java_array_types(symbol_table_baset &symbol_table)
992983
copy_loop,
993984
return_inst});
994985

995-
symbolt clone_symbol;
996-
clone_symbol.name=clone_name;
986+
symbolt clone_symbol{clone_name, clone_type, ID_java};
997987
clone_symbol.pretty_name =
998988
id2string(struct_tag_type_identifier) + ".clone:()";
999989
clone_symbol.base_name="clone";
1000-
clone_symbol.type=clone_type;
1001990
clone_symbol.value=clone_body;
1002-
clone_symbol.mode=ID_java;
1003991
symbol_table.add(clone_symbol);
1004992
}
1005993
}

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,11 @@ void create_method_stub_symbol(
102102
{
103103
messaget log(message_handler);
104104

105-
symbolt symbol;
106-
symbol.name = identifier;
105+
symbolt symbol{identifier, type, ID_java};
107106
symbol.base_name = base_name;
108107
symbol.pretty_name = pretty_name;
109-
symbol.type = type;
110108
symbol.type.set(ID_access, ID_private);
111109
to_java_method_type(symbol.type).set_is_final(true);
112-
symbol.value.make_nil();
113-
symbol.mode = ID_java;
114110
assign_parameter_names(
115111
to_java_method_type(symbol.type), symbol.name, symbol_table);
116112
set_declaring_class(symbol, declaring_class);
@@ -307,18 +303,15 @@ void java_bytecode_convert_method_lazy(
307303
symbol_table_baset &symbol_table,
308304
message_handlert &message_handler)
309305
{
310-
symbolt method_symbol;
311-
312306
java_method_typet member_type = member_type_lazy(
313307
m.descriptor,
314308
m.signature,
315309
id2string(class_symbol.name),
316310
id2string(m.base_name),
317311
message_handler);
318312

319-
method_symbol.name=method_identifier;
313+
symbolt method_symbol{method_identifier, typet{}, ID_java};
320314
method_symbol.base_name=m.base_name;
321-
method_symbol.mode=ID_java;
322315
method_symbol.location=m.source_location;
323316
method_symbol.location.set_function(method_identifier);
324317

@@ -1900,13 +1893,9 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
19001893
// Add anonymous locals to the symtab:
19011894
for(const auto &var : used_local_names)
19021895
{
1903-
symbolt new_symbol;
1904-
new_symbol.name=var.get_identifier();
1905-
new_symbol.type=var.type();
1896+
symbolt new_symbol{var.get_identifier(), var.type(), ID_java};
19061897
new_symbol.base_name=var.get(ID_C_base_name);
19071898
new_symbol.pretty_name=strip_java_namespace_prefix(var.get_identifier());
1908-
new_symbol.mode=ID_java;
1909-
new_symbol.is_type=false;
19101899
new_symbol.is_file_local=true;
19111900
new_symbol.is_thread_local=true;
19121901
new_symbol.is_lvalue=true;

jbmc/src/java_bytecode/java_bytecode_internal_additions.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,22 @@ void java_internal_additions(symbol_table_baset &dest)
2424
// add __CPROVER_rounding_mode
2525

2626
{
27-
symbolt symbol;
28-
symbol.name = rounding_mode_identifier();
27+
symbolt symbol{rounding_mode_identifier(), signed_int_type(), ID_C};
2928
symbol.base_name = symbol.name;
30-
symbol.type=signed_int_type();
31-
symbol.mode=ID_C;
3229
symbol.is_lvalue=true;
3330
symbol.is_state_var=true;
3431
symbol.is_thread_local=true;
3532
dest.add(symbol);
3633
}
3734

3835
{
39-
auxiliary_symbolt symbol;
36+
auxiliary_symbolt symbol{
37+
INFLIGHT_EXCEPTION_VARIABLE_NAME,
38+
pointer_type(java_void_type()),
39+
ID_java};
4040
symbol.base_name = INFLIGHT_EXCEPTION_VARIABLE_BASENAME;
41-
symbol.name = INFLIGHT_EXCEPTION_VARIABLE_NAME;
42-
symbol.mode = ID_java;
43-
symbol.type = pointer_type(java_void_type());
4441
symbol.type.set(ID_C_no_nondet_initialization, true);
4542
symbol.value = null_pointer_exprt(to_pointer_type(symbol.type));
46-
symbol.is_file_local = false;
4743
symbol.is_static_lifetime = true;
4844
dest.add(symbol);
4945
}

jbmc/src/java_bytecode/java_bytecode_language.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -528,15 +528,13 @@ static symbol_exprt get_or_create_class_literal_symbol(
528528
java_lang_Class);
529529
if(!symbol_table.has_symbol(symbol_expr.get_identifier()))
530530
{
531-
symbolt new_class_symbol;
532-
new_class_symbol.name = symbol_expr.get_identifier();
533-
new_class_symbol.type = symbol_expr.type();
531+
symbolt new_class_symbol{
532+
symbol_expr.get_identifier(), symbol_expr.type(), ID_java};
534533
INVARIANT(
535534
has_prefix(id2string(new_class_symbol.name), "java::"),
536535
"class identifier should have 'java::' prefix");
537536
new_class_symbol.base_name =
538537
id2string(new_class_symbol.name).substr(6);
539-
new_class_symbol.mode = ID_java;
540538
new_class_symbol.is_lvalue = true;
541539
new_class_symbol.is_state_var = true;
542540
new_class_symbol.is_static_lifetime = true;
@@ -651,13 +649,11 @@ static void create_stub_global_symbol(
651649
const irep_idt &class_id,
652650
bool force_nondet_init)
653651
{
654-
symbolt new_symbol;
652+
symbolt new_symbol{symbol_id, symbol_type, ID_java};
655653
new_symbol.is_static_lifetime = true;
656654
new_symbol.is_lvalue = true;
657655
new_symbol.is_state_var = true;
658-
new_symbol.name = symbol_id;
659656
new_symbol.base_name = symbol_basename;
660-
new_symbol.type = symbol_type;
661657
set_declaring_class(new_symbol, class_id);
662658
// Public access is a guess; it encourages merging like-typed static fields,
663659
// whereas a more restricted visbility would encourage separating them.
@@ -666,8 +662,6 @@ static void create_stub_global_symbol(
666662
// We set the field as final to avoid assuming they can be overridden.
667663
new_symbol.type.set(ID_C_constant, true);
668664
new_symbol.pretty_name = new_symbol.name;
669-
new_symbol.mode = ID_java;
670-
new_symbol.is_type = false;
671665
// If pointer-typed, initialise to null and a static initialiser will be
672666
// created to initialise on first reference. If primitive-typed, specify
673667
// nondeterministic initialisation by setting a nil value.

jbmc/src/java_bytecode/java_entry_point.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,10 @@ void create_java_initialize(symbol_table_baset &symbol_table)
5050
// if a GOTO binary provided it. This behaviour mirrors the ANSI-C frontend.
5151
symbol_table.remove(INITIALIZE_FUNCTION);
5252

53-
symbolt initialize;
54-
initialize.name=INITIALIZE_FUNCTION;
53+
symbolt initialize{
54+
INITIALIZE_FUNCTION, java_method_typet({}, java_void_type()), ID_java};
5555
initialize.base_name=INITIALIZE_FUNCTION;
56-
initialize.mode=ID_java;
5756

58-
initialize.type = java_method_typet({}, java_void_type());
5957
symbol_table.add(initialize);
6058
}
6159

@@ -764,13 +762,12 @@ bool generate_java_start_function(
764762

765763
// create a symbol for the __CPROVER__start function, associate the code that
766764
// we just built and register it in the symbol table
767-
symbolt new_symbol;
768-
769-
new_symbol.name=goto_functionst::entry_point();
765+
symbolt new_symbol{
766+
goto_functionst::entry_point(),
767+
java_method_typet{{}, java_void_type()},
768+
ID_java};
770769
new_symbol.base_name = goto_functionst::entry_point();
771-
new_symbol.type = java_method_typet({}, java_void_type());
772770
new_symbol.value.swap(init_code);
773-
new_symbol.mode=ID_java;
774771

775772
if(!symbol_table.insert(std::move(new_symbol)).second)
776773
{

jbmc/src/java_bytecode/java_local_variable_table.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -832,13 +832,9 @@ void java_bytecode_convert_methodt::setup_local_variables(
832832
result, v.var.start_pc, v.var.length, false, std::move(v.holes));
833833

834834
// Register the local variable in the symbol table
835-
symbolt new_symbol;
836-
new_symbol.name=identifier;
837-
new_symbol.type=t;
835+
symbolt new_symbol{identifier, t, ID_java};
838836
new_symbol.base_name=v.var.name;
839837
new_symbol.pretty_name=id2string(identifier).substr(6, std::string::npos);
840-
new_symbol.mode=ID_java;
841-
new_symbol.is_type=false;
842838
new_symbol.is_file_local=true;
843839
new_symbol.is_thread_local=true;
844840
new_symbol.is_lvalue=true;

jbmc/src/java_bytecode/java_static_initializers.cpp

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -120,18 +120,15 @@ static symbolt add_new_variable_symbol(
120120
const bool is_thread_local,
121121
const bool is_static_lifetime)
122122
{
123-
symbolt new_symbol;
124-
new_symbol.name = name;
123+
symbolt new_symbol{name, type, ID_java};
125124
new_symbol.pretty_name = name;
126125
new_symbol.base_name = name;
127-
new_symbol.type = type;
128126
new_symbol.type.set(ID_C_no_nondet_initialization, true);
129127
new_symbol.value = value;
130128
new_symbol.is_lvalue = true;
131129
new_symbol.is_state_var = true;
132130
new_symbol.is_static_lifetime = is_static_lifetime;
133131
new_symbol.is_thread_local = is_thread_local;
134-
new_symbol.mode = ID_java;
135132
symbol_table.add(new_symbol);
136133
return new_symbol;
137134
}
@@ -336,16 +333,14 @@ static void create_function_symbol(
336333
symbol_table_baset &symbol_table,
337334
synthetic_methods_mapt &synthetic_methods)
338335
{
339-
symbolt function_symbol;
340-
const java_method_typet function_type({}, java_void_type());
336+
symbolt function_symbol{
337+
function_name, java_method_typet({}, java_void_type()), ID_java};
341338
function_symbol.name = function_name;
342339
function_symbol.pretty_name = function_symbol.name;
343340
function_symbol.base_name = function_base_name;
344-
function_symbol.type = function_type;
345341
// This provides a back-link from a method to its associated class, as is done
346342
// for java_bytecode_convert_methodt::convert.
347343
set_declaring_class(function_symbol, class_name);
348-
function_symbol.mode = ID_java;
349344
bool failed = symbol_table.add(function_symbol);
350345
INVARIANT(!failed, id2string(function_base_name) + " symbol should be fresh");
351346

@@ -969,14 +964,10 @@ void stub_global_initializer_factoryt::create_stub_global_initializer_symbols(
969964
"a class cannot be both incomplete, and so have stub static fields, and "
970965
"also define a static initializer");
971966

972-
const java_method_typet thunk_type({}, java_void_type());
973-
974-
symbolt static_init_symbol;
975-
static_init_symbol.name = static_init_name;
967+
symbolt static_init_symbol{
968+
static_init_name, java_method_typet({}, java_void_type()), ID_java};
976969
static_init_symbol.pretty_name = static_init_name;
977970
static_init_symbol.base_name = "clinit():V";
978-
static_init_symbol.mode = ID_java;
979-
static_init_symbol.type = thunk_type;
980971
// This provides a back-link from a method to its associated class, as is
981972
// done for java_bytecode_convert_methodt::convert.
982973
set_declaring_class(static_init_symbol, it->first);

jbmc/src/java_bytecode/java_string_library_preprocess.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,7 @@ void java_string_library_preprocesst::add_string_type(
221221
symbol_table_baset &symbol_table)
222222
{
223223
irep_idt class_symbol_name = "java::" + id2string(class_name);
224-
symbolt tmp_string_symbol;
225-
tmp_string_symbol.name = class_symbol_name;
224+
type_symbolt tmp_string_symbol{class_symbol_name, typet{}, ID_java};
226225
symbolt *string_symbol = nullptr;
227226
bool already_exists = symbol_table.move(tmp_string_symbol, string_symbol);
228227

@@ -250,8 +249,6 @@ void java_string_library_preprocesst::add_string_type(
250249
string_symbol->base_name = id2string(class_name);
251250
string_symbol->pretty_name = id2string(class_name);
252251
string_symbol->type = new_string_type;
253-
string_symbol->is_type = true;
254-
string_symbol->mode = ID_java;
255252
}
256253

257254
auto &string_type = to_java_class_type(string_symbol->type);

jbmc/src/java_bytecode/java_string_literals.cpp

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,10 @@ symbol_exprt get_or_create_string_literal_symbol(
5757
#endif
5858

5959
// Create a new symbol:
60-
symbolt new_symbol;
61-
new_symbol.name = escaped_symbol_name_with_prefix;
62-
new_symbol.type = string_type;
60+
symbolt new_symbol{escaped_symbol_name_with_prefix, string_type, ID_java};
6361
new_symbol.type.set(ID_C_constant, true);
6462
new_symbol.base_name = escaped_symbol_name;
6563
new_symbol.pretty_name = value;
66-
new_symbol.mode = ID_java;
67-
new_symbol.is_type = false;
6864
new_symbol.is_lvalue = true;
6965
new_symbol.is_state_var = true;
7066
new_symbol.is_static_lifetime = true;
@@ -97,18 +93,15 @@ symbol_exprt get_or_create_string_literal_symbol(
9793
literal_init.operands()[length_nb] = length;
9894

9995
// Initialize the string with a constant utf-16 array:
100-
symbolt array_symbol;
101-
array_symbol.name = escaped_symbol_name_with_prefix + "_constarray";
96+
symbolt array_symbol{
97+
escaped_symbol_name_with_prefix + "_constarray", data.type(), ID_java};
10298
array_symbol.base_name = escaped_symbol_name + "_constarray";
10399
array_symbol.pretty_name = value;
104-
array_symbol.mode = ID_java;
105-
array_symbol.is_type = false;
106100
array_symbol.is_lvalue = true;
107101
// These are basically const global data:
108102
array_symbol.is_static_lifetime = true;
109103
array_symbol.is_state_var = true;
110104
array_symbol.value = data;
111-
array_symbol.type = array_symbol.value.type();
112105
array_symbol.type.set(ID_C_constant, true);
113106

114107
if(symbol_table.add(array_symbol))
@@ -122,15 +115,13 @@ symbol_exprt get_or_create_string_literal_symbol(
122115
literal_init.operands()[data_nb] = array_pointer;
123116

124117
// Associate array with pointer
125-
symbolt return_symbol;
126-
return_symbol.name = escaped_symbol_name_with_prefix + "_return_value";
118+
symbolt return_symbol{
119+
escaped_symbol_name_with_prefix + "_return_value", typet{}, ID_java};
127120
return_symbol.base_name = escaped_symbol_name + "_return_value";
128121
return_symbol.pretty_name =
129122
escaped_symbol_name.length() > 10
130123
? escaped_symbol_name.substr(0, 10) + "..._return_value"
131124
: escaped_symbol_name + "_return_value";
132-
return_symbol.mode = ID_java;
133-
return_symbol.is_type = false;
134125
return_symbol.is_lvalue = true;
135126
return_symbol.is_static_lifetime = true;
136127
return_symbol.is_state_var = true;

0 commit comments

Comments
 (0)