@@ -124,6 +124,43 @@ expr2smvt::resultt expr2smvt::convert_binary(
124
124
125
125
/* ******************************************************************\
126
126
127
+ Function: expr2smvt::convert_function_application
128
+
129
+ Inputs:
130
+
131
+ Outputs:
132
+
133
+ Purpose:
134
+
135
+ \*******************************************************************/
136
+
137
+ expr2smvt::resultt expr2smvt::convert_function_application (
138
+ const std::string &symbol,
139
+ const exprt &src)
140
+ {
141
+ bool first = true ;
142
+
143
+ std::string dest = symbol + ' (' ;
144
+
145
+ for (auto &op : src.operands ())
146
+ {
147
+ if (first)
148
+ first = false ;
149
+ else
150
+ {
151
+ dest += ' ,' ;
152
+ dest += ' ' ;
153
+ }
154
+
155
+ auto op_rec = convert_rec (op);
156
+ dest += op_rec.s ;
157
+ }
158
+
159
+ return {precedencet::MAX, dest + ' )' };
160
+ }
161
+
162
+ /* ******************************************************************\
163
+
127
164
Function: expr2smvt::convert_rtctl
128
165
129
166
Inputs:
@@ -584,6 +621,18 @@ expr2smvt::resultt expr2smvt::convert_rec(const exprt &src)
584
621
return convert_binary (to_binary_expr (src), " >>" , precedencet::SHIFT);
585
622
}
586
623
624
+ else if (src.id () == ID_smv_extend)
625
+ return convert_function_application (" extend" , src);
626
+
627
+ else if (src.id () == ID_smv_resize)
628
+ return convert_function_application (" resize" , src);
629
+
630
+ else if (src.id () == ID_smv_signed_cast)
631
+ return convert_function_application (" signed" , src);
632
+
633
+ else if (src.id () == ID_smv_unsigned_cast)
634
+ return convert_function_application (" unsigned" , src);
635
+
587
636
else if (src.id () == ID_typecast)
588
637
{
589
638
return convert_rec (to_typecast_expr (src).op ());
0 commit comments