Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/smvlang/parser.y
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions src/smvlang/smv_parse_tree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/*******************************************************************\
Expand Down
6 changes: 4 additions & 2 deletions src/smvlang/smv_parse_tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -274,11 +274,13 @@ class smv_parse_treet
}

mc_varst vars;
enum_sett enum_set;

std::list<irep_idt> ports;
};


// enums are global
enum_sett enum_set;

typedef std::unordered_map<irep_idt, modulet, irep_id_hash> modulest;

modulest modules;
Expand Down
3 changes: 2 additions & 1 deletion src/smvlang/smv_typecheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
Loading