File tree Expand file tree Collapse file tree 5 files changed +31
-22
lines changed
Expand file tree Collapse file tree 5 files changed +31
-22
lines changed Original file line number Diff line number Diff line change @@ -181,7 +181,9 @@ static smv_parse_treet::modulet &new_module(YYSTYPE &module_name)
181181{
182182 auto base_name = stack_expr (module_name).id_string ();
183183 const std::string identifier=smv_module_symbol (base_name);
184- auto &module =PARSER.parse_tree .modules [identifier];
184+ PARSER.parse_tree .module_list .push_back (smv_parse_treet::modulet{});
185+ auto &module =PARSER.parse_tree .module_list .back ();
186+ PARSER.parse_tree .module_map [identifier] = --PARSER.parse_tree .module_list .end ();
185187 module .name = identifier;
186188 module .base_name = base_name;
187189 PARSER.module = &module ;
Original file line number Diff line number Diff line change @@ -62,12 +62,13 @@ void smv_languaget::dependencies(
6262 const std::string &module ,
6363 std::set<std::string> &module_set)
6464{
65- smv_parse_treet::modulest ::const_iterator
66- m_it= smv_parse_tree.modules .find (module );
65+ smv_parse_treet::module_mapt ::const_iterator m_it =
66+ smv_parse_tree.module_map .find (module );
6767
68- if (m_it==smv_parse_tree.modules .end ()) return ;
68+ if (m_it == smv_parse_tree.module_map .end ())
69+ return ;
6970
70- const smv_parse_treet::modulet &smv_module= m_it->second ;
71+ const smv_parse_treet::modulet &smv_module = * m_it->second ;
7172
7273 for (auto &element : smv_module.elements )
7374 if (element.is_var () && element.expr .type ().id () == ID_smv_submodule)
@@ -89,10 +90,8 @@ Function: smv_languaget::modules_provided
8990
9091void smv_languaget::modules_provided (std::set<std::string> &module_set)
9192{
92- for (smv_parse_treet::modulest::const_iterator
93- it=smv_parse_tree.modules .begin ();
94- it!=smv_parse_tree.modules .end (); it++)
95- module_set.insert (id2string (it->second .name ));
93+ for (const auto &module : smv_parse_tree.module_list )
94+ module_set.insert (id2string (module .name ));
9695}
9796
9897/* ******************************************************************\
Original file line number Diff line number Diff line change @@ -28,7 +28,8 @@ Function: smv_parse_treet::swap
2828
2929void smv_parse_treet::swap (smv_parse_treet &smv_parse_tree)
3030{
31- smv_parse_tree.modules .swap (modules);
31+ smv_parse_tree.module_list .swap (module_list);
32+ smv_parse_tree.module_map .swap (module_map);
3233}
3334
3435/* ******************************************************************\
@@ -45,7 +46,8 @@ Function: smv_parse_treet::clear
4546
4647void smv_parse_treet::clear ()
4748{
48- modules.clear ();
49+ module_map.clear ();
50+ module_list.clear ();
4951}
5052
5153/* ******************************************************************\
@@ -99,10 +101,8 @@ std::string to_string(smv_parse_treet::modulet::elementt::element_typet i)
99101
100102void smv_parse_treet::show (std::ostream &out) const
101103{
102- for (auto &module_it : modules )
104+ for (auto &module : module_list )
103105 {
104- auto &module = module_it.second ;
105-
106106 out << " Module: " << module .name << std::endl << std::endl;
107107
108108 out << " PARAMETERS:\n " ;
Original file line number Diff line number Diff line change @@ -19,6 +19,11 @@ Author: Daniel Kroening, kroening@kroening.com
1919class smv_parse_treet
2020{
2121public:
22+ smv_parse_treet () = default ;
23+
24+ // don't copy, contains pointers
25+ smv_parse_treet (const smv_parse_treet &) = delete ;
26+
2227 typedef std::unordered_set<irep_idt, irep_id_hash> enum_sett;
2328
2429 struct modulet
@@ -287,11 +292,14 @@ class smv_parse_treet
287292
288293 enum_sett enum_set;
289294 };
290-
291- typedef std::unordered_map<irep_idt, modulet, irep_id_hash> modulest;
292-
293- modulest modules;
294-
295+
296+ using module_listt = std::list<modulet>;
297+ module_listt module_list;
298+
299+ using module_mapt =
300+ std::unordered_map<irep_idt, module_listt::iterator, irep_id_hash>;
301+ module_mapt module_map;
302+
295303 void swap (smv_parse_treet &smv_parse_tree);
296304 void clear ();
297305
Original file line number Diff line number Diff line change @@ -2552,14 +2552,14 @@ Function: smv_typecheckt::typecheck
25522552
25532553void smv_typecheckt::typecheck ()
25542554{
2555- smv_parse_treet::modulest::iterator it= smv_parse_tree.modules .find (module );
2555+ auto it = smv_parse_tree.module_map .find (module );
25562556
2557- if (it== smv_parse_tree.modules .end ())
2557+ if (it == smv_parse_tree.module_map .end ())
25582558 {
25592559 throw errort () << " failed to find module " << module ;
25602560 }
25612561
2562- convert (it->second );
2562+ convert (* it->second );
25632563}
25642564
25652565/* ******************************************************************\
You can’t perform that action at this time.
0 commit comments