diff --git a/src/smvlang/parser.y b/src/smvlang/parser.y index d09130e67..f58552e56 100644 --- a/src/smvlang/parser.y +++ b/src/smvlang/parser.y @@ -676,7 +676,7 @@ enum_list : enum_element enum_element: IDENTIFIER_Token { $$=$1; - PARSER.module->enum_set.insert(stack_expr($1).id_string()); + PARSER.parse_tree.enum_set.insert(stack_expr($1).id_string()); exprt expr(ID_smv_identifier); expr.set(ID_identifier, stack_expr($1).id()); @@ -951,6 +951,7 @@ identifier : IDENTIFIER_Token variable_identifier: complex_identifier { + // Could be a variable, or an enum auto id = merge_complex_identifier(stack_expr($1)); init($$, ID_smv_identifier); stack_expr($$).set(ID_identifier, id); diff --git a/src/smvlang/smv_parse_tree.cpp b/src/smvlang/smv_parse_tree.cpp index 8af63bb84..d6eeb6957 100644 --- a/src/smvlang/smv_parse_tree.cpp +++ b/src/smvlang/smv_parse_tree.cpp @@ -23,6 +23,7 @@ Function: smv_parse_treet::swap void smv_parse_treet::swap(smv_parse_treet &smv_parse_tree) { smv_parse_tree.modules.swap(modules); + smv_parse_tree.enum_set.swap(enum_set); } /*******************************************************************\ diff --git a/src/smvlang/smv_parse_tree.h b/src/smvlang/smv_parse_tree.h index 610e61ee8..5327f1f2a 100644 --- a/src/smvlang/smv_parse_tree.h +++ b/src/smvlang/smv_parse_tree.h @@ -274,11 +274,13 @@ class smv_parse_treet } mc_varst vars; - enum_sett enum_set; std::list ports; }; - + + // enums are global + enum_sett enum_set; + typedef std::unordered_map modulest; modulest modules; diff --git a/src/smvlang/smv_typecheck.cpp b/src/smvlang/smv_typecheck.cpp index eb9d49e84..3d74bd61b 100644 --- a/src/smvlang/smv_typecheck.cpp +++ b/src/smvlang/smv_typecheck.cpp @@ -1709,7 +1709,8 @@ void smv_typecheckt::convert(exprt &expr) identifier.find("::") == std::string::npos, "conversion is done once"); // enum or variable? - if(modulep->enum_set.find(identifier) == modulep->enum_set.end()) + if( + smv_parse_tree.enum_set.find(identifier) == smv_parse_tree.enum_set.end()) { std::string id = module + "::var::" + identifier;