@@ -148,21 +148,22 @@ func (st *programState) subOp(left parser.ValueExpr, right parser.ValueExpr) (Va
148
148
return (* leftValue ).evalSub (st , right )
149
149
}
150
150
151
- func (st * programState ) numOp (left parser.ValueExpr , right parser.ValueExpr , op func ( left * big. Int , right * big. Int ) Value ) (Value , InterpreterError ) {
152
- parsedLeft , err := evaluateExprAs (st , left , expectNumber )
151
+ func (st * programState ) eqOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
152
+ parsedLeft , err := evaluateExprAs (st , left , expectAnything )
153
153
if err != nil {
154
154
return nil , err
155
155
}
156
156
157
- parsedRight , err := evaluateExprAs (st , right , expectNumber )
157
+ parsedRight , err := evaluateExprAs (st , right , expectAnything )
158
158
if err != nil {
159
159
return nil , err
160
160
}
161
161
162
- return op (parsedLeft , parsedRight ), nil
162
+ // TODO remove reflect usage
163
+ return Bool (reflect .DeepEqual (parsedLeft , parsedRight )), nil
163
164
}
164
165
165
- func (st * programState ) eqOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
166
+ func (st * programState ) neqOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
166
167
parsedLeft , err := evaluateExprAs (st , left , expectAnything )
167
168
if err != nil {
168
169
return nil , err
@@ -174,66 +175,85 @@ func (st *programState) eqOp(left parser.ValueExpr, right parser.ValueExpr) (Val
174
175
}
175
176
176
177
// TODO remove reflect usage
177
- return Bool (reflect .DeepEqual (parsedLeft , parsedRight )), nil
178
+ return Bool (! ( reflect .DeepEqual (parsedLeft , parsedRight ) )), nil
178
179
}
179
180
180
- func (st * programState ) neqOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
181
- parsedLeft , err := evaluateExprAs ( st , left , expectAnything )
181
+ func (st * programState ) ltOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
182
+ cmp , err := st . evaluateExprAsCmp ( left )
182
183
if err != nil {
183
184
return nil , err
184
185
}
185
186
186
- parsedRight , err := evaluateExprAs ( st , right , expectAnything )
187
+ cmpResult , err := ( * cmp ). evalCmp ( st , right )
187
188
if err != nil {
188
189
return nil , err
189
190
}
190
191
191
- // TODO remove reflect usage
192
- return Bool (! (reflect .DeepEqual (parsedLeft , parsedRight ))), nil
193
- }
192
+ switch * cmpResult {
193
+ case - 1 :
194
+ return Bool (true ), nil
195
+ default :
196
+ return Bool (false ), nil
197
+ }
194
198
195
- func (st * programState ) ltOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
196
- return st .numOp (left , right , func (left , right * big.Int ) Value {
197
- switch left .Cmp (right ) {
198
- case - 1 :
199
- return Bool (true )
200
- default :
201
- return Bool (false )
202
- }
203
- })
204
199
}
205
200
206
201
func (st * programState ) gtOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
207
- return st .numOp (left , right , func (left , right * big.Int ) Value {
208
- switch left .Cmp (right ) {
209
- case 1 :
210
- return Bool (true )
211
- default :
212
- return Bool (false )
213
- }
214
- })
202
+ cmp , err := st .evaluateExprAsCmp (left )
203
+ if err != nil {
204
+ return nil , err
205
+ }
206
+
207
+ cmpResult , err := (* cmp ).evalCmp (st , right )
208
+ if err != nil {
209
+ return nil , err
210
+ }
211
+
212
+ switch * cmpResult {
213
+ case 1 :
214
+ return Bool (true ), nil
215
+ default :
216
+ return Bool (false ), nil
217
+ }
215
218
}
216
219
217
220
func (st * programState ) lteOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
218
- return st .numOp (left , right , func (left , right * big.Int ) Value {
219
- switch left .Cmp (right ) {
220
- case - 1 , 0 :
221
- return Bool (true )
222
- default :
223
- return Bool (false )
224
- }
225
- })
221
+ cmp , err := st .evaluateExprAsCmp (left )
222
+ if err != nil {
223
+ return nil , err
224
+ }
225
+
226
+ cmpResult , err := (* cmp ).evalCmp (st , right )
227
+ if err != nil {
228
+ return nil , err
229
+ }
230
+
231
+ switch * cmpResult {
232
+ case - 1 , 0 :
233
+ return Bool (true ), nil
234
+ default :
235
+ return Bool (false ), nil
236
+ }
237
+
226
238
}
227
239
228
240
func (st * programState ) gteOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
229
- return st .numOp (left , right , func (left , right * big.Int ) Value {
230
- switch left .Cmp (right ) {
231
- case 1 , 0 :
232
- return Bool (true )
233
- default :
234
- return Bool (false )
235
- }
236
- })
241
+ cmp , err := st .evaluateExprAsCmp (left )
242
+ if err != nil {
243
+ return nil , err
244
+ }
245
+
246
+ cmpResult , err := (* cmp ).evalCmp (st , right )
247
+ if err != nil {
248
+ return nil , err
249
+ }
250
+
251
+ switch * cmpResult {
252
+ case 1 , 0 :
253
+ return Bool (true ), nil
254
+ default :
255
+ return Bool (false ), nil
256
+ }
237
257
}
238
258
239
259
func (st * programState ) andOp (left parser.ValueExpr , right parser.ValueExpr ) (Value , InterpreterError ) {
0 commit comments