File tree Expand file tree Collapse file tree 1 file changed +24
-24
lines changed Expand file tree Collapse file tree 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) {
395395}
396396
397397func (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-
405398 switch node .Operator {
406399 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 )
419401
420402 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 )
426404 c .emit (OpNot )
427405
428406 case "or" , "||" :
@@ -580,6 +558,28 @@ func (c *compiler) BinaryNode(node *ast.BinaryNode) {
580558 }
581559}
582560
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+
583583func isSimpleType (node ast.Node ) bool {
584584 if node == nil {
585585 return false
You can’t perform that action at this time.
0 commit comments