@@ -58,7 +58,7 @@ class smv_typecheckt:public typecheckt
58
58
} modet;
59
59
60
60
void convert (smv_parse_treet::modulet &);
61
- void convert ( smv_parse_treet::mc_varst &);
61
+ void create_var_symbols ( const smv_parse_treet::modulet::item_listt &);
62
62
63
63
void collect_define (const equal_exprt &);
64
64
void convert_defines (exprt::operandst &invar);
@@ -1901,7 +1901,7 @@ void smv_typecheckt::convert(
1901
1901
1902
1902
/* ******************************************************************\
1903
1903
1904
- Function: smv_typecheckt::convert_vars
1904
+ Function: smv_typecheckt::create_var_symbols
1905
1905
1906
1906
Inputs:
1907
1907
@@ -1911,43 +1911,56 @@ Function: smv_typecheckt::convert_vars
1911
1911
1912
1912
\*******************************************************************/
1913
1913
1914
- void smv_typecheckt::convert (smv_parse_treet::mc_varst &vars)
1914
+ void smv_typecheckt::create_var_symbols (
1915
+ const smv_parse_treet::modulet::item_listt &items)
1915
1916
{
1916
1917
symbolt symbol;
1917
1918
1918
1919
symbol.mode =" SMV" ;
1919
1920
symbol.module =modulep->name ;
1920
1921
1921
- for (const auto &var_it : vars )
1922
+ for (const auto &item : items )
1922
1923
{
1923
- const smv_parse_treet::mc_vart &var = var_it. second ;
1924
-
1925
- typet type = var. type ;
1924
+ if (item. is_var ())
1925
+ {
1926
+ typet type = item. expr . type () ;
1926
1927
1927
- // check the type, if any
1928
- if (type.is_not_nil ())
1928
+ // check the type
1929
1929
check_type (type);
1930
1930
1931
- symbol.base_name = var_it.first ;
1931
+ symbol.base_name = to_symbol_expr (item.expr ).get_identifier ();
1932
+ symbol.name = module + " ::var::" + id2string (symbol.base_name );
1933
+
1934
+ if (module == " smv::main" )
1935
+ symbol.pretty_name = symbol.base_name ;
1936
+ else
1937
+ symbol.pretty_name = strip_smv_prefix (symbol.name );
1938
+
1939
+ symbol.value = nil_exprt{};
1940
+ symbol.is_input = true ;
1941
+ symbol.is_state_var = false ;
1942
+ symbol.type = std::move (type);
1932
1943
1933
- if (var.identifier ==" " )
1944
+ symbol_table.add (symbol);
1945
+ }
1946
+ else if (item.is_define ())
1934
1947
{
1948
+ symbol.base_name =
1949
+ to_symbol_expr (to_equal_expr (item.expr ).lhs ()).get_identifier ();
1935
1950
symbol.name =module +" ::var::" +id2string (symbol.base_name );
1936
1951
1937
1952
if (module == " smv::main" )
1938
1953
symbol.pretty_name = symbol.base_name ;
1939
1954
else
1940
1955
symbol.pretty_name = strip_smv_prefix (symbol.name );
1941
- }
1942
- else
1943
- symbol.name =var.identifier ;
1944
1956
1945
- symbol.value . make_nil () ;
1946
- symbol.is_input = true ;
1947
- symbol.is_state_var = false ;
1948
- symbol.type = std::move (type );
1957
+ symbol.value = nil_exprt{} ;
1958
+ symbol.is_input = true ;
1959
+ symbol.is_state_var = false ;
1960
+ symbol.type . make_nil ( );
1949
1961
1950
- symbol_table.add (symbol);
1962
+ symbol_table.add (symbol);
1963
+ }
1951
1964
}
1952
1965
}
1953
1966
@@ -2091,8 +2104,8 @@ void smv_typecheckt::convert(smv_parse_treet::modulet &smv_module)
2091
2104
2092
2105
define_map.clear ();
2093
2106
2094
- // variables first, need to be visible before declaration
2095
- convert (smv_module.vars );
2107
+ // variables/defines first, can be used before their declaration
2108
+ create_var_symbols (smv_module.items );
2096
2109
2097
2110
// transition relation
2098
2111
0 commit comments