This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
     new 4cf5196cac GROOVY-11415: Tweak bytecode for identity
4cf5196cac is described below

commit 4cf5196cace32ecb837d2f3b4885be1cc176f7a3
Author: Daniel Sun <sun...@apache.org>
AuthorDate: Mon Jul 1 15:51:21 2024 +0000

    GROOVY-11415: Tweak bytecode for identity
    
    (cherry picked from commit 5ec593d588badb99daa48dde9f9242ea6291f1ba)
---
 .../classgen/asm/BinaryExpressionHelper.java       |  7 +++++--
 .../classgen/asm/StatementMetaTypeChooser.java     |  3 ++-
 src/test-resources/core/IdenticalOp_01x.groovy     | 24 ++++++++++++++++++++++
 3 files changed, 31 insertions(+), 3 deletions(-)

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 8434c3975a..724a060498 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
@@ -345,14 +345,17 @@ public class BinaryExpressionHelper {
         AsmClassGenerator acg = controller.getAcg();
         MethodVisitor mv = controller.getMethodVisitor();
         OperandStack operandStack = controller.getOperandStack();
+        TypeChooser typeChooser = controller.getTypeChooser();
 
         Expression lhs = expression.getLeftExpression();
         lhs.visit(acg);
-        if (ClassHelper.isPrimitiveType(lhs.getType())) operandStack.box();
+        ClassNode leftType = typeChooser.resolveType(lhs, 
controller.getClassNode());
+        if (ClassHelper.isPrimitiveType(leftType)) operandStack.box();
 
         Expression rhs = expression.getRightExpression();
         rhs.visit(acg);
-        if (ClassHelper.isPrimitiveType(rhs.getType())) operandStack.box();
+        ClassNode rightType = typeChooser.resolveType(rhs, 
controller.getClassNode());
+        if (ClassHelper.isPrimitiveType(rightType)) operandStack.box();
 
         Label trueCase = operandStack.jump(identical ? IF_ACMPEQ : IF_ACMPNE);
         ConstantExpression.PRIM_FALSE.visit(acg);
diff --git 
a/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java 
b/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
index 99611b5c2b..6cf35b31b9 100644
--- 
a/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
+++ 
b/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
@@ -33,7 +33,8 @@ public class StatementMetaTypeChooser implements TypeChooser {
     @Override
     public ClassNode resolveType(final Expression exp, final ClassNode 
current) {
         ClassNode type = null;
-        if (exp instanceof ClassExpression) { type = exp.getType();
+        if (exp instanceof ClassExpression) {
+            type = exp.getType();
             ClassNode classType = 
ClassHelper.makeWithoutCaching("java.lang.Class");
             classType.setGenericsTypes(new GenericsType[] {new 
GenericsType(type)});
             classType.setRedirect(ClassHelper.CLASS_Type);
diff --git a/src/test-resources/core/IdenticalOp_01x.groovy 
b/src/test-resources/core/IdenticalOp_01x.groovy
index 9efe74daca..d4998d4e27 100644
--- a/src/test-resources/core/IdenticalOp_01x.groovy
+++ b/src/test-resources/core/IdenticalOp_01x.groovy
@@ -40,6 +40,18 @@ def c() {
     assert 0 === 0
     assert 0 !== null
     assert null !== 0
+
+    int e = 1
+    int f = 1
+    assert e === f
+
+    int g = 1
+    Integer h = 1
+    assert g === h
+
+    Integer j = 1
+    int k = 1
+    assert j === k
 }
 c()
 
@@ -65,5 +77,17 @@ def c_cs() {
     assert 0 === 0
     assert 0 !== null
     assert null !== 0
+
+    int e = 1
+    int f = 1
+    assert e === f
+
+    int g = 1
+    Integer h = 1
+    assert g === h
+
+    Integer j = 1
+    int k = 1
+    assert j === k
 }
 c_cs()

Reply via email to