@@ -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