@@ -88,21 +88,35 @@ void print_smv(const netlistt &netlist, std::ostream &out, const exprt &expr)
88
88
symbol_tablet symbol_table;
89
89
namespacet ns{symbol_table};
90
90
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;
92
101
93
- exprt replaced = expr;
94
- replaced.visit_pre (
95
- [&netlist](exprt &node)
102
+ resultt convert_rec (const exprt &expr) override
96
103
{
97
- if (node .id () == ID_literal)
104
+ if (expr .id () == ID_literal)
98
105
{
99
106
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 ()};
102
113
}
103
- });
114
+ else
115
+ return expr2smvt::convert_rec (expr);
116
+ }
117
+ };
104
118
105
- out << expr2smv (replaced, ns );
119
+ out << expr2smv_netlistt{ns, netlist}. convert (expr );
106
120
}
107
121
108
122
void smv_netlist (const netlistt &netlist, std::ostream &out)
@@ -243,29 +257,8 @@ void smv_netlist(const netlistt &netlist, std::ostream &out)
243
257
}
244
258
else if (is_SVA (netlist_expr))
245
259
{
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" );
269
262
}
270
263
else
271
264
{
0 commit comments