Skip to content

Commit dd8238d

Browse files
committed
SMV: enums are global
SMV's enum name space is global, i.e., crosses modules. This moves the resolution of identifier to variables or enums from the parser to the typechecking phase.
1 parent 4901b07 commit dd8238d

File tree

4 files changed

+9
-4
lines changed

4 files changed

+9
-4
lines changed

src/smvlang/parser.y

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -676,7 +676,7 @@ enum_list : enum_element
676676
enum_element: IDENTIFIER_Token
677677
{
678678
$$=$1;
679-
PARSER.module->enum_set.insert(stack_expr($1).id_string());
679+
PARSER.parse_tree.enum_set.insert(stack_expr($1).id_string());
680680

681681
exprt expr(ID_smv_identifier);
682682
expr.set(ID_identifier, stack_expr($1).id());
@@ -951,6 +951,7 @@ identifier : IDENTIFIER_Token
951951

952952
variable_identifier: complex_identifier
953953
{
954+
// Could be a variable, or an enum
954955
auto id = merge_complex_identifier(stack_expr($1));
955956
init($$, ID_smv_identifier);
956957
stack_expr($$).set(ID_identifier, id);

src/smvlang/smv_parse_tree.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Function: smv_parse_treet::swap
2323
void smv_parse_treet::swap(smv_parse_treet &smv_parse_tree)
2424
{
2525
smv_parse_tree.modules.swap(modules);
26+
smv_parse_tree.enum_set.swap(enum_set);
2627
}
2728

2829
/*******************************************************************\

src/smvlang/smv_parse_tree.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,11 +274,13 @@ class smv_parse_treet
274274
}
275275

276276
mc_varst vars;
277-
enum_sett enum_set;
278277

279278
std::list<irep_idt> ports;
280279
};
281-
280+
281+
// enums are global
282+
enum_sett enum_set;
283+
282284
typedef std::unordered_map<irep_idt, modulet, irep_id_hash> modulest;
283285

284286
modulest modules;

src/smvlang/smv_typecheck.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1709,7 +1709,8 @@ void smv_typecheckt::convert(exprt &expr)
17091709
identifier.find("::") == std::string::npos, "conversion is done once");
17101710

17111711
// enum or variable?
1712-
if(modulep->enum_set.find(identifier) == modulep->enum_set.end())
1712+
if(
1713+
smv_parse_tree.enum_set.find(identifier) == smv_parse_tree.enum_set.end())
17131714
{
17141715
std::string id = module + "::var::" + identifier;
17151716

0 commit comments

Comments
 (0)