(node *ast.BinaryNode)
| 625 | } |
| 626 | |
| 627 | func (c *compiler) equalBinaryNode(node *ast.BinaryNode) { |
| 628 | l := kind(node.Left.Type()) |
| 629 | r := kind(node.Right.Type()) |
| 630 | |
| 631 | leftIsSimple := isSimpleType(node.Left) |
| 632 | rightIsSimple := isSimpleType(node.Right) |
| 633 | leftAndRightAreSimple := leftIsSimple && rightIsSimple |
| 634 | |
| 635 | c.compile(node.Left) |
| 636 | c.derefInNeeded(node.Left) |
| 637 | c.compile(node.Right) |
| 638 | c.derefInNeeded(node.Right) |
| 639 | |
| 640 | if l == r && l == reflect.Int && leftAndRightAreSimple { |
| 641 | c.emit(OpEqualInt) |
| 642 | } else if l == r && l == reflect.String && leftAndRightAreSimple { |
| 643 | c.emit(OpEqualString) |
| 644 | } else { |
| 645 | c.emit(OpEqual) |
| 646 | } |
| 647 | } |
| 648 | |
| 649 | func isSimpleType(node ast.Node) bool { |
| 650 | if node == nil { |
no test coverage detected