@@ -82,13 +82,16 @@ static void remove_vector(exprt &expr)
82
82
expr.id ()==ID_mod || expr.id ()==ID_bitxor ||
83
83
expr.id ()==ID_bitand || expr.id ()==ID_bitor)
84
84
{
85
+ // FIXME plus, mult, bitxor, bitor and bitand are not binary operators
86
+ // normally. It is unclear why is it safe to assume that they are
87
+ // in this context
88
+ auto const &binary_expr = to_binary_expr (expr);
85
89
remove_vector (expr.type ());
86
90
array_typet array_type=to_array_type (expr.type ());
87
91
88
92
mp_integer dimension;
89
93
to_integer (array_type.size (), dimension);
90
94
91
- assert (expr.operands ().size ()==2 );
92
95
const typet subtype=array_type.subtype ();
93
96
// do component-wise:
94
97
// x+y -> vector(x[0]+y[0],x[1]+y[1],...)
@@ -99,22 +102,23 @@ static void remove_vector(exprt &expr)
99
102
{
100
103
exprt index =from_integer (i, array_type.size ().type ());
101
104
102
- array_expr.operands ()[i]=
103
- binary_exprt (index_exprt (expr.op0 (), index , subtype), expr.id (),
104
- index_exprt (expr.op1 (), index , subtype));
105
+ array_expr.operands ()[i] = binary_exprt (
106
+ index_exprt (binary_expr.op0 (), index , subtype),
107
+ binary_expr.id (),
108
+ index_exprt (binary_expr.op1 (), index , subtype));
105
109
}
106
110
107
111
expr=array_expr;
108
112
}
109
113
else if (expr.id ()==ID_unary_minus || expr.id ()==ID_bitnot)
110
114
{
115
+ auto const &unary_expr = to_unary_expr (expr);
111
116
remove_vector (expr.type ());
112
117
array_typet array_type=to_array_type (expr.type ());
113
118
114
119
mp_integer dimension;
115
120
to_integer (array_type.size (), dimension);
116
121
117
- assert (expr.operands ().size ()==1 );
118
122
const typet subtype=array_type.subtype ();
119
123
// do component-wise:
120
124
// -x -> vector(-x[0],-x[1],...)
@@ -125,8 +129,8 @@ static void remove_vector(exprt &expr)
125
129
{
126
130
exprt index =from_integer (i, array_type.size ().type ());
127
131
128
- array_expr.operands ()[i]=
129
- unary_exprt (expr .id (), index_exprt (expr .op0 (), index , subtype));
132
+ array_expr.operands ()[i] = unary_exprt (
133
+ unary_expr .id (), index_exprt (unary_expr .op0 (), index , subtype));
130
134
}
131
135
132
136
expr=array_expr;
0 commit comments