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 2023/01/15 20:37:20 UTC
[groovy] branch master updated: close over local variables
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
The following commit(s) were added to refs/heads/master by this push:
new d4fd5c68fa close over local variables
d4fd5c68fa is described below
commit d4fd5c68fa4cb3414e00d4e51b388aecf186ac3a
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Jan 15 14:37:01 2023 -0600
close over local variables
---
src/main/java/org/codehaus/groovy/classgen/Verifier.java | 15 +++++++++------
.../java/org/codehaus/groovy/control/CompilationUnit.java | 2 +-
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/classgen/Verifier.java b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
index ebcf2ab9d3..d5d9fea506 100644
--- a/src/main/java/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
@@ -466,7 +466,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
FieldNode staticMetaClassField = node.addField(staticMetaClassFieldName, ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC, ClassHelper.make(ClassInfo.class, false), null);
staticMetaClassField.setSynthetic(true);
-
+ ClassNode classNode = this.classNode;
node.addSyntheticMethod(
"$getStaticMetaClass",
ACC_PROTECTED,
@@ -1322,14 +1322,15 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
}
protected Statement createGetterBlock(final PropertyNode propertyNode, final FieldNode field) {
+ String owner = BytecodeHelper.getClassInternalName(classNode);
return new BytecodeSequence(new BytecodeInstruction() {
@Override
public void visit(final MethodVisitor mv) {
if (field.isStatic()) {
- mv.visitFieldInsn(GETSTATIC, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
+ mv.visitFieldInsn(GETSTATIC, owner, field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
} else {
mv.visitVarInsn(ALOAD, 0);
- mv.visitFieldInsn(GETFIELD, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
+ mv.visitFieldInsn(GETFIELD, owner, field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
}
BytecodeHelper.doReturn(mv, field.getType());
}
@@ -1337,16 +1338,17 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
}
protected Statement createSetterBlock(final PropertyNode propertyNode, final FieldNode field) {
+ String owner = BytecodeHelper.getClassInternalName(classNode);
return new BytecodeSequence(new BytecodeInstruction() {
@Override
public void visit(final MethodVisitor mv) {
if (field.isStatic()) {
BytecodeHelper.load(mv, field.getType(), 0);
- mv.visitFieldInsn(PUTSTATIC, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
+ mv.visitFieldInsn(PUTSTATIC, owner, field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
} else {
mv.visitVarInsn(ALOAD, 0);
BytecodeHelper.load(mv, field.getType(), 1);
- mv.visitFieldInsn(PUTFIELD, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
+ mv.visitFieldInsn(PUTFIELD, owner, field.getName(), BytecodeHelper.getTypeDescription(field.getType()));
}
mv.visitInsn(RETURN);
}
@@ -1532,6 +1534,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
// if we reach this point there is least one parameter or return type
// that is different in its specified form, so create a bridge method
+ String owner = BytecodeHelper.getClassInternalName(classNode);
return new MethodNode(
oldMethod.getName(),
overridingMethod.getModifiers() | ACC_SYNTHETIC | ACC_BRIDGE,
@@ -1556,7 +1559,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
BytecodeHelper.doCast(mv, goal[i].getType());
}
}
- mv.visitMethodInsn(INVOKEVIRTUAL, BytecodeHelper.getClassInternalName(classNode), overridingMethod.getName(), BytecodeHelper.getMethodDescriptor(nmr, overridingMethod.getParameters()), false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, owner, overridingMethod.getName(), BytecodeHelper.getMethodDescriptor(nmr, overridingMethod.getParameters()), false);
BytecodeHelper.doReturn(mv, oldMethod.getReturnType());
}
diff --git a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
index e695367126..f53d2ed7ec 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
@@ -582,7 +582,7 @@ public class CompilationUnit extends ProcessingUnit {
* Adds a ClassNode directly to the unit (i.e. without source).
* WARNING: the source is needed for error reporting, using
* this method without setting a SourceUnit will cause
- * NullPinterExceptions
+ * NullPointerExceptions
*/
public void addClassNode(final ClassNode node) {
ModuleNode module = new ModuleNode(getAST());