diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java index 6e5d562c5c7..a326712e2ae 100644 --- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java +++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java @@ -370,14 +370,24 @@ private void evaluateIdentity(BinaryExpression expression, boolean identical) { TypeChooser typeChooser = controller.getTypeChooser(); Expression lhs = expression.getLeftExpression(); - lhs.visit(acg); ClassNode leftType = typeChooser.resolveType(lhs, controller.getClassNode()); - if (ClassHelper.isPrimitiveType(leftType)) operandStack.box(); Expression rhs = expression.getRightExpression(); - rhs.visit(acg); ClassNode rightType = typeChooser.resolveType(rhs, controller.getClassNode()); - if (ClassHelper.isPrimitiveType(rightType)) operandStack.box(); + + boolean leftPrimitive = ClassHelper.isPrimitiveType(leftType); + boolean rightPrimitive = ClassHelper.isPrimitiveType(rightType); + if (leftPrimitive && rightPrimitive) { + BinaryExpressionMultiTypeDispatcher helper = new BinaryExpressionMultiTypeDispatcher(controller); + boolean done = helper.doPrimitiveCompare(leftType, rightType, expression); + if (done) return; + } + + lhs.visit(acg); + if (leftPrimitive) operandStack.box(); + + rhs.visit(acg); + if (rightPrimitive) operandStack.box(); Label trueCase = operandStack.jump(identical ? IF_ACMPEQ : IF_ACMPNE); ConstantExpression.PRIM_FALSE.visit(acg); diff --git a/src/test-resources/core/IdenticalOp_01x.groovy b/src/test-resources/core/IdenticalOp_01x.groovy index d4998d4e275..009617389b1 100644 --- a/src/test-resources/core/IdenticalOp_01x.groovy +++ b/src/test-resources/core/IdenticalOp_01x.groovy @@ -38,6 +38,7 @@ def c() { assert true === true assert false === false assert 0 === 0 + assert 100000 === 100000 assert 0 !== null assert null !== 0 @@ -75,6 +76,7 @@ def c_cs() { assert true === true assert false === false assert 0 === 0 + assert 100000 === 100000 assert 0 !== null assert null !== 0