@@ -20,7 +20,7 @@ std::string id2smv(const irep_idt &id)
2020{
2121 std::string result;
2222
23- for (unsigned i = 0 ; i < id.size (); i++)
23+ for (std:: size_t i = 0 ; i < id.size (); i++)
2424 {
2525 const bool first = i == 0 ;
2626 char ch = id[i];
@@ -60,7 +60,7 @@ void print_smv(const netlistt &netlist, std::ostream &out, literalt a)
6060 return ;
6161 }
6262
63- unsigned node_nr = a.var_no ();
63+ std:: size_t node_nr = a.var_no ();
6464 DATA_INVARIANT (node_nr < netlist.number_of_nodes (), " node_nr in range" );
6565
6666 if (a.sign ())
@@ -88,21 +88,35 @@ void print_smv(const netlistt &netlist, std::ostream &out, const exprt &expr)
8888 symbol_tablet symbol_table;
8989 namespacet ns{symbol_table};
9090
91- // replace literal expressions by symbols
91+ class expr2smv_netlistt : public expr2smvt
92+ {
93+ public:
94+ expr2smv_netlistt (const namespacet &ns, const netlistt &__netlist)
95+ : expr2smvt(ns), netlist(__netlist)
96+ {
97+ }
98+
99+ protected:
100+ const netlistt &netlist;
92101
93- exprt replaced = expr;
94- replaced.visit_pre (
95- [&netlist](exprt &node)
102+ resultt convert_rec (const exprt &expr) override
96103 {
97- if (node .id () == ID_literal)
104+ if (expr .id () == ID_literal)
98105 {
99106 std::ostringstream buffer;
100- print_smv (netlist, buffer, to_literal_expr (node).get_literal ());
101- node = symbol_exprt{buffer.str (), node.type ()};
107+ auto l = to_literal_expr (expr).get_literal ();
108+ print_smv (netlist, buffer, l);
109+ if (l.sign ())
110+ return {precedencet::NOT, buffer.str ()};
111+ else
112+ return {precedencet::MAX, buffer.str ()};
102113 }
103- });
114+ else
115+ return expr2smvt::convert_rec (expr);
116+ }
117+ };
104118
105- out << expr2smv (replaced, ns );
119+ out << expr2smv_netlistt{ns, netlist}. convert (expr );
106120}
107121
108122void smv_netlist (const netlistt &netlist, std::ostream &out)
@@ -115,17 +129,15 @@ void smv_netlist(const netlistt &netlist, std::ostream &out)
115129
116130 auto &var_map = netlist.var_map ;
117131
118- for (var_mapt::mapt::const_iterator it = var_map.map .begin ();
119- it != var_map.map .end ();
120- it++)
132+ for (auto &var_it : var_map.map )
121133 {
122- const var_mapt::vart &var = it-> second ;
134+ const var_mapt::vart &var = var_it. second ;
123135
124- for (unsigned i = 0 ; i < var.bits .size (); i++)
136+ for (std:: size_t i = 0 ; i < var.bits .size (); i++)
125137 {
126138 if (var.is_latch ())
127139 {
128- out << " VAR " << id2smv (it-> first );
140+ out << " VAR " << id2smv (var_it. first );
129141 if (var.bits .size () != 1 )
130142 out << " [" << i << " ]" ;
131143 out << " : boolean;" << ' \n ' ;
@@ -137,17 +149,15 @@ void smv_netlist(const netlistt &netlist, std::ostream &out)
137149 out << " -- Inputs" << ' \n ' ;
138150 out << ' \n ' ;
139151
140- for (var_mapt::mapt::const_iterator it = var_map.map .begin ();
141- it != var_map.map .end ();
142- it++)
152+ for (auto &var_it : var_map.map )
143153 {
144- const var_mapt::vart &var = it-> second ;
154+ const var_mapt::vart &var = var_it. second ;
145155
146- for (unsigned i = 0 ; i < var.bits .size (); i++)
156+ for (std:: size_t i = 0 ; i < var.bits .size (); i++)
147157 {
148158 if (var.is_input ())
149159 {
150- out << " VAR " << id2smv (it-> first );
160+ out << " VAR " << id2smv (var_it. first );
151161 if (var.bits .size () != 1 )
152162 out << " [" << i << " ]" ;
153163 out << " : boolean;" << ' \n ' ;
@@ -161,7 +171,7 @@ void smv_netlist(const netlistt &netlist, std::ostream &out)
161171
162172 auto &nodes = netlist.nodes ;
163173
164- for (unsigned node_nr = 0 ; node_nr < nodes.size (); node_nr++)
174+ for (std:: size_t node_nr = 0 ; node_nr < nodes.size (); node_nr++)
165175 {
166176 const aig_nodet &node = nodes[node_nr];
167177
@@ -179,17 +189,15 @@ void smv_netlist(const netlistt &netlist, std::ostream &out)
179189 out << " -- Next state functions" << ' \n ' ;
180190 out << ' \n ' ;
181191
182- for (var_mapt::mapt::const_iterator it = var_map.map .begin ();
183- it != var_map.map .end ();
184- it++)
192+ for (auto &var_it : var_map.map )
185193 {
186- const var_mapt::vart &var = it-> second ;
194+ const var_mapt::vart &var = var_it. second ;
187195
188- for (unsigned i = 0 ; i < var.bits .size (); i++)
196+ for (std:: size_t i = 0 ; i < var.bits .size (); i++)
189197 {
190198 if (var.is_latch ())
191199 {
192- out << " ASSIGN next(" << id2smv (it-> first );
200+ out << " ASSIGN next(" << id2smv (var_it. first );
193201 if (var.bits .size () != 1 )
194202 out << " [" << i << " ]" ;
195203 out << " ):=" ;
@@ -249,29 +257,8 @@ void smv_netlist(const netlistt &netlist, std::ostream &out)
249257 }
250258 else if (is_SVA (netlist_expr))
251259 {
252- if (is_SVA_always_p (netlist_expr))
253- {
254- out << " -- " << id << ' \n ' ;
255- out << " CTLSPEC AG " ;
256- print_smv (netlist, out, to_sva_always_expr (netlist_expr).op ());
257- out << ' \n ' ;
258- }
259- else if (is_SVA_always_s_eventually_p (netlist_expr))
260- {
261- out << " -- " << id << ' \n ' ;
262- out << " CTLSPEC AG AF " ;
263- print_smv (
264- netlist,
265- out,
266- to_sva_s_eventually_expr (to_sva_always_expr (netlist_expr).op ()).op ());
267- out << ' \n ' ;
268- }
269- else
270- {
271- out << " -- " << id << ' \n ' ;
272- out << " -- not translated\n " ;
273- out << ' \n ' ;
274- }
260+ // Should have been mapped to LTL
261+ DATA_INVARIANT (false , " smv_netlist got SVA" );
275262 }
276263 else
277264 {
0 commit comments