This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
new da664dbe2c GROOVY-10775: compute frames for stack map
da664dbe2c is described below
commit da664dbe2c21e667e583ed20bd5829f7f2501f69
Author: Eric Milles <[email protected]>
AuthorDate: Sun Oct 9 18:26:26 2022 -0500
GROOVY-10775: compute frames for stack map
---
.../codehaus/groovy/control/CompilationUnit.java | 23 +++++++++++-----------
.../groovy/runtime/callsite/CallSiteGenerator.java | 6 +-----
2 files changed, 13 insertions(+), 16 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
index d719ae0919..39d1882392 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
@@ -79,6 +79,7 @@ import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
+import static org.codehaus.groovy.runtime.StringGroovyMethods.isAtLeast;
import static
org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys.DYNAMIC_OUTER_NODE_CALLBACK;
import static
org.codehaus.groovy.transform.stc.StaticTypesMarker.SWITCH_CONDITION_EXPRESSION_TYPE;
@@ -823,8 +824,8 @@ 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) {
@@ -838,22 +839,22 @@ public class CompilationUnit extends ProcessingUnit {
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 163b3fc2bc..9d6a5591c8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
@@ -209,11 +209,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) {