@@ -124,6 +124,43 @@ expr2smvt::resultt expr2smvt::convert_binary(
124124
125125/* ******************************************************************\
126126
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+
127164Function: expr2smvt::convert_rtctl
128165
129166 Inputs:
@@ -584,6 +621,18 @@ expr2smvt::resultt expr2smvt::convert_rec(const exprt &src)
584621 return convert_binary (to_binary_expr (src), " >>" , precedencet::SHIFT);
585622 }
586623
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+
587636 else if (src.id () == ID_typecast)
588637 {
589638 return convert_rec (to_typecast_expr (src).op ());
0 commit comments