File tree 1 file changed +24
-24
lines changed
1 file changed +24
-24
lines changed Original file line number Diff line number Diff line change @@ -395,34 +395,12 @@ func (c *compiler) UnaryNode(node *ast.UnaryNode) {
395
395
}
396
396
397
397
func (c * compiler ) BinaryNode (node * ast.BinaryNode ) {
398
- l := kind (node .Left )
399
- r := kind (node .Right )
400
-
401
- leftIsSimple := isSimpleType (node .Left )
402
- rightIsSimple := isSimpleType (node .Right )
403
- leftAndRightAreSimple := leftIsSimple && rightIsSimple
404
-
405
398
switch node .Operator {
406
399
case "==" :
407
- c .compile (node .Left )
408
- c .derefInNeeded (node .Left )
409
- c .compile (node .Right )
410
- c .derefInNeeded (node .Right )
411
-
412
- if l == r && l == reflect .Int && leftAndRightAreSimple {
413
- c .emit (OpEqualInt )
414
- } else if l == r && l == reflect .String && leftAndRightAreSimple {
415
- c .emit (OpEqualString )
416
- } else {
417
- c .emit (OpEqual )
418
- }
400
+ c .equalBinaryNode (node )
419
401
420
402
case "!=" :
421
- c .compile (node .Left )
422
- c .derefInNeeded (node .Left )
423
- c .compile (node .Right )
424
- c .derefInNeeded (node .Right )
425
- c .emit (OpEqual )
403
+ c .equalBinaryNode (node )
426
404
c .emit (OpNot )
427
405
428
406
case "or" , "||" :
@@ -580,6 +558,28 @@ func (c *compiler) BinaryNode(node *ast.BinaryNode) {
580
558
}
581
559
}
582
560
561
+ func (c * compiler ) equalBinaryNode (node * ast.BinaryNode ) {
562
+ l := kind (node .Left )
563
+ r := kind (node .Right )
564
+
565
+ leftIsSimple := isSimpleType (node .Left )
566
+ rightIsSimple := isSimpleType (node .Right )
567
+ leftAndRightAreSimple := leftIsSimple && rightIsSimple
568
+
569
+ c .compile (node .Left )
570
+ c .derefInNeeded (node .Left )
571
+ c .compile (node .Right )
572
+ c .derefInNeeded (node .Right )
573
+
574
+ if l == r && l == reflect .Int && leftAndRightAreSimple {
575
+ c .emit (OpEqualInt )
576
+ } else if l == r && l == reflect .String && leftAndRightAreSimple {
577
+ c .emit (OpEqualString )
578
+ } else {
579
+ c .emit (OpEqual )
580
+ }
581
+ }
582
+
583
583
func isSimpleType (node ast.Node ) bool {
584
584
if node == nil {
585
585
return false
You can’t perform that action at this time.
0 commit comments