You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/10/09 23:41:35 UTC

[groovy] branch GROOVY_2_5_X updated: GROOVY-10775: compute frames for stack map

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

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


The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push:
     new 921927e6b8 GROOVY-10775: compute frames for stack map
921927e6b8 is described below

commit 921927e6b8ff28208cc3f88d0317c22a0b45d91a
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Oct 9 18:26:26 2022 -0500

    GROOVY-10775: compute frames for stack map
---
 .../codehaus/groovy/control/CompilationUnit.java   | 28 ++++++++++++----------
 .../groovy/runtime/callsite/CallSiteGenerator.java |  6 +----
 2 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
index 935c9b997e..7500ab1615 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
@@ -66,6 +66,8 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import static org.codehaus.groovy.runtime.StringGroovyMethods.isAtLeast;
+
 /**
  * The CompilationUnit collects all compilation data as it is generated by the compiler system.
  * You can use this object to add additional source units to the compilation, or force the
@@ -852,37 +854,37 @@ public class CompilationUnit extends ProcessingUnit {
     protected ClassVisitor createClassVisitor() {
         CompilerConfiguration config = getConfiguration();
         int computeMaxStackAndFrames = ClassWriter.COMPUTE_MAXS;
-        if (CompilerConfiguration.isPostJDK7(config.getTargetBytecode()) || config.isIndyEnabled()) {
-            computeMaxStackAndFrames += ClassWriter.COMPUTE_FRAMES;
+        if (config.isIndyEnabled() || isAtLeast(config.getTargetBytecode(), CompilerConfiguration.JDK6)) {
+            computeMaxStackAndFrames = ClassWriter.COMPUTE_FRAMES;
         }
         return new ClassWriter(computeMaxStackAndFrames) {
             private ClassNode getClassNode(String name) {
                 // try classes under compilation
                 CompileUnit cu = getAST();
                 ClassNode cn = cu.getClass(name);
-                if (cn!=null) return cn;
+                if (cn != null) return cn;
                 // try inner classes
                 cn = cu.getGeneratedInnerClass(name);
-                if (cn!=null) return cn;
+                if (cn != null) return cn;
                 ClassNodeResolver.LookupResult lookupResult = getClassNodeResolver().resolveName(name, CompilationUnit.this);
                 return lookupResult == null ? null : lookupResult.getClassNode();
             }
-            private ClassNode getCommonSuperClassNode(ClassNode c, ClassNode d) {
+            private ClassNode getCommonSuperClassNode(ClassNode a, ClassNode b) {
                 // adapted from ClassWriter code
-                if (c.isDerivedFrom(d)) return d;
-                if (d.isDerivedFrom(c)) return c;
-                if (c.isInterface() || d.isInterface()) return ClassHelper.OBJECT_TYPE;
+                if (a.isDerivedFrom(b)) return b;
+                if (b.isDerivedFrom(a)) return a;
+                if (a.isInterface() || b.isInterface()) return ClassHelper.OBJECT_TYPE;
                 do {
-                    c = c.getSuperClass();
-                } while (c!=null && !d.isDerivedFrom(c));
-                if (c==null) return ClassHelper.OBJECT_TYPE;
-                return c;
+                    a = a.getSuperClass();
+                } while (a != null && !b.isDerivedFrom(a));
+                if (a == null) return ClassHelper.OBJECT_TYPE;
+                return a;
             }
             @Override
             protected String getCommonSuperClass(String arg1, String arg2) {
                 ClassNode a = getClassNode(arg1.replace('/', '.'));
                 ClassNode b = getClassNode(arg2.replace('/', '.'));
-                return getCommonSuperClassNode(a,b).getName().replace('.','/');
+                return getCommonSuperClassNode(a, b).getName().replace('.', '/');
             }
         };
     }
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
index 8931d19599..3cf9c11665 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
@@ -219,11 +219,7 @@ public class CallSiteGenerator {
     }
 
     private static ClassWriter makeClassWriter() {
-        if (VMPluginFactory.getPlugin().getVersion()>=8) {
-            return new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
-        } else {
-            return new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        }
+        return new ClassWriter(VMPluginFactory.getPlugin().getVersion() >= 6 ? ClassWriter.COMPUTE_FRAMES : ClassWriter.COMPUTE_MAXS);
     }
 
     public static Constructor compilePogoMethod(CachedMethod cachedMethod) {