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

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

commit b2707d2a72a5ba84866de9c9df3b8dbbf0119aa2
Author: Eric Milles <[email protected]>
AuthorDate: Fri Oct 3 18:10:48 2025 -0500

    minor items
---
 .../groovy/classgen/AsmClassGenerator.java         | 35 ++++++++++------------
 .../codehaus/groovy/classgen/asm/OperandStack.java |  2 +-
 2 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java 
b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index c453f4dda7..11f7db8c43 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -94,7 +94,6 @@ import org.codehaus.groovy.ast.stmt.SynchronizedStatement;
 import org.codehaus.groovy.ast.stmt.ThrowStatement;
 import org.codehaus.groovy.ast.stmt.TryCatchStatement;
 import org.codehaus.groovy.ast.stmt.WhileStatement;
-import org.codehaus.groovy.ast.tools.WideningCategories;
 import org.codehaus.groovy.classgen.asm.BytecodeHelper;
 import org.codehaus.groovy.classgen.asm.BytecodeVariable;
 import org.codehaus.groovy.classgen.asm.CompileStack;
@@ -132,7 +131,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
-import java.util.TreeMap;
 import java.util.function.Consumer;
 
 import static org.apache.groovy.ast.tools.ClassNodeUtils.getField;
@@ -158,6 +156,7 @@ import static 
org.codehaus.groovy.ast.tools.GeneralUtils.fieldX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.maybeFallsThrough;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.thisPropX;
 import static org.codehaus.groovy.ast.tools.ParameterUtils.isVargs;
+import static 
org.codehaus.groovy.ast.tools.WideningCategories.implementsInterfaceOrSubclassOf;
 import static 
org.codehaus.groovy.transform.SealedASTTransformation.sealedNative;
 import static 
org.codehaus.groovy.transform.SealedASTTransformation.sealedSkipAnnotation;
 import static org.objectweb.asm.Opcodes.AALOAD;
@@ -994,8 +993,8 @@ public class AsmClassGenerator extends ClassGenerator {
 
     @Override
     public void visitCastExpression(final CastExpression castExpression) {
-        Expression subExpression = castExpression.getExpression();
-        subExpression.visit(this);
+        Expression expression = castExpression.getExpression();
+        expression.visit(this);
 
         ClassNode type = castExpression.getType();
         if (isObjectType(type)) return;
@@ -1004,19 +1003,13 @@ public class AsmClassGenerator extends ClassGenerator {
         OperandStack operandStack = controller.getOperandStack();
         if (castExpression.isCoerce()) {
             operandStack.doAsType(type);
+        } else if (isNullConstant(expression) && !isPrimitiveType(type)) {
+            operandStack.replace(type);
+        } else if (castExpression.isStrict() || (!isPrimitiveType(type) && 
implementsInterfaceOrSubclassOf(typeOf(expression), type))) {
+            BytecodeHelper.doCast(controller.getMethodVisitor(), type); // 
checkcast or unbox
+            operandStack.replace(type);
         } else {
-            if (isNullConstant(subExpression) && !isPrimitiveType(type)) {
-                operandStack.replace(type);
-            } else {
-                ClassNode subExprType = 
controller.getTypeChooser().resolveType(subExpression, 
controller.getClassNode());
-                if (castExpression.isStrict() ||
-                        (!isPrimitiveType(type) && 
WideningCategories.implementsInterfaceOrSubclassOf(subExprType, type))) {
-                    BytecodeHelper.doCast(controller.getMethodVisitor(), type);
-                    operandStack.replace(type);
-                } else {
-                    operandStack.doGroovyCast(type);
-                }
-            }
+            operandStack.doGroovyCast(type);
         }
     }
 
@@ -1192,7 +1185,7 @@ public class AsmClassGenerator extends ClassGenerator {
             return !controller.isStaticContext(); // TODO: not @POJO
         }
 
-        ClassNode objectExpressionType = 
controller.getTypeChooser().resolveType(objectExpression, 
controller.getClassNode());
+        ClassNode objectExpressionType = typeOf(objectExpression);
         if (isObjectType(objectExpressionType)) objectExpressionType = 
objectExpression.getType();
         return objectExpressionType.isDerivedFromGroovyObject();
     }
@@ -1456,9 +1449,7 @@ public class AsmClassGenerator extends ClassGenerator {
             pexp.visit(this);
 
             if (!compileStack.isLHS() && !expression.isDynamicTyped()) {
-                ClassNode variableType = controller.getTypeChooser()
-                    .resolveType(expression, controller.getClassNode());
-                controller.getOperandStack().doGroovyCast(variableType);
+                controller.getOperandStack().doGroovyCast(typeOf(expression));
             }
         }
 
@@ -2441,4 +2432,8 @@ public class AsmClassGenerator extends ClassGenerator {
     public void throwException(final String message) {
         throw new RuntimeParserException(message, currentASTNode);
     }
+
+    private ClassNode typeOf(final Expression expr) {
+        return controller.getTypeChooser().resolveType(expr, 
controller.getClassNode());
+    }
 }
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java 
b/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java
index 4ff4538551..aee1e7c598 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java
@@ -375,7 +375,7 @@ public class OperandStack {
         } else {
             top = stack.get(size - 1);
             if (!WideningCategories.implementsInterfaceOrSubclassOf(top, 
targetType)) {
-                BytecodeHelper.doCast(mv,targetType);
+                BytecodeHelper.doCast(mv, targetType);
             }
         }
         replace(targetType);

Reply via email to