@@ -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)
@@ -243,29 +257,8 @@ void smv_netlist(const netlistt &netlist, std::ostream &out)
243257 }
244258 else if (is_SVA (netlist_expr))
245259 {
246- if (is_SVA_always_p (netlist_expr))
247- {
248- out << " -- " << id << ' \n ' ;
249- out << " CTLSPEC AG " ;
250- print_smv (netlist, out, to_sva_always_expr (netlist_expr).op ());
251- out << ' \n ' ;
252- }
253- else if (is_SVA_always_s_eventually_p (netlist_expr))
254- {
255- out << " -- " << id << ' \n ' ;
256- out << " CTLSPEC AG AF " ;
257- print_smv (
258- netlist,
259- out,
260- to_sva_s_eventually_expr (to_sva_always_expr (netlist_expr).op ()).op ());
261- out << ' \n ' ;
262- }
263- else
264- {
265- out << " -- " << id << ' \n ' ;
266- out << " -- not translated\n " ;
267- out << ' \n ' ;
268- }
260+ // Should have been mapped to LTL
261+ DATA_INVARIANT (false , " smv_netlist got SVA" );
269262 }
270263 else
271264 {
0 commit comments