This is an automated email from the ASF dual-hosted git repository.
sunlan 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 9eed7a8 Trivial refactoring: extract common variable
9eed7a8 is described below
commit 9eed7a82590833b4347cc375152c4054429f5500
Author: Daniel Sun <[email protected]>
AuthorDate: Wed Jun 23 22:46:22 2021 +0800
Trivial refactoring: extract common variable
---
.../groovy/classgen/AsmClassGenerator.java | 103 ++++++++++++---------
1 file changed, 59 insertions(+), 44 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 76e2cff..39458bb 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -576,10 +576,11 @@ public class AsmClassGenerator extends ClassGenerator {
ClassNode type = node.getReturnType();
if (isPrimitiveType(type)) {
mv.visitLdcInsn(Integer.valueOf(0));
- controller.getOperandStack().push(ClassHelper.int_TYPE);
- controller.getOperandStack().doGroovyCast(type);
+ OperandStack operandStack = controller.getOperandStack();
+ operandStack.push(ClassHelper.int_TYPE);
+ operandStack.doGroovyCast(type);
BytecodeHelper.doReturn(mv, type);
- controller.getOperandStack().remove(1);
+ operandStack.remove(1);
} else {
mv.visitInsn(ACONST_NULL);
BytecodeHelper.doReturn(mv, type);
@@ -858,11 +859,12 @@ public class AsmClassGenerator extends ClassGenerator {
@Override
public void visitConstantExpression(final ConstantExpression expression) {
final String constantName = expression.getConstantName();
+ OperandStack operandStack = controller.getOperandStack();
if (controller.isStaticConstructor() || constantName == null) {
- controller.getOperandStack().pushConstant(expression);
+ operandStack.pushConstant(expression);
} else {
controller.getMethodVisitor().visitFieldInsn(GETSTATIC,
controller.getInternalClassName(),constantName,
BytecodeHelper.getTypeDescription(expression.getType()));
- controller.getOperandStack().push(expression.getType());
+ operandStack.push(expression.getType());
}
}
@@ -910,19 +912,20 @@ public class AsmClassGenerator extends ClassGenerator {
Expression subExpression = castExpression.getExpression();
subExpression.visit(this);
if (isObjectType(type)) return;
+ OperandStack operandStack = controller.getOperandStack();
if (castExpression.isCoerce()) {
- controller.getOperandStack().doAsType(type);
+ operandStack.doAsType(type);
} else {
if (ExpressionUtils.isNullConstant(subExpression) &&
!isPrimitiveType(type)) {
- controller.getOperandStack().replace(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);
- controller.getOperandStack().replace(type);
+ operandStack.replace(type);
} else {
- controller.getOperandStack().doGroovyCast(type);
+ operandStack.doGroovyCast(type);
}
}
}
@@ -935,10 +938,11 @@ public class AsmClassGenerator extends ClassGenerator {
@Override
public void visitBooleanExpression(final BooleanExpression expression) {
- int mark = controller.getOperandStack().getStackLength();
+ OperandStack operandStack = controller.getOperandStack();
+ int mark = operandStack.getStackLength();
expression.getExpression().visit(this);
- controller.getOperandStack().castToBool(mark, true);
+ operandStack.castToBool(mark, true);
}
@Override
@@ -1297,16 +1301,18 @@ public class AsmClassGenerator extends ClassGenerator {
FieldNode field = expression.getField();
ClassNode type = field.getType();
+ OperandStack operandStack = controller.getOperandStack();
if (field.isHolder() &&
!controller.isInGeneratedFunctionConstructor()) {
mv.visitFieldInsn(GETSTATIC, getFieldOwnerName(field),
field.getName(), BytecodeHelper.getTypeDescription(type));
mv.visitMethodInsn(INVOKEVIRTUAL, "groovy/lang/Reference", "get",
"()Ljava/lang/Object;", false);
- controller.getOperandStack().push(ClassHelper.OBJECT_TYPE);
+ operandStack.push(ClassHelper.OBJECT_TYPE);
} else {
mv.visitFieldInsn(GETSTATIC, getFieldOwnerName(field),
field.getName(), BytecodeHelper.getTypeDescription(type));
- controller.getOperandStack().push(type);
+ operandStack.push(type);
}
}
+
/**
* RHS instance field. should move most of the code in the BytecodeHelper
*/
@@ -1318,11 +1324,12 @@ public class AsmClassGenerator extends ClassGenerator {
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, getFieldOwnerName(field), field.getName(),
BytecodeHelper.getTypeDescription(type));
+ OperandStack operandStack = controller.getOperandStack();
if (field.isHolder() &&
!controller.isInGeneratedFunctionConstructor()) {
mv.visitMethodInsn(INVOKEVIRTUAL, "groovy/lang/Reference", "get",
"()Ljava/lang/Object;", false);
- controller.getOperandStack().push(ClassHelper.OBJECT_TYPE);
+ operandStack.push(ClassHelper.OBJECT_TYPE);
} else {
- controller.getOperandStack().push(type);
+ operandStack.push(type);
}
}
@@ -1361,10 +1368,11 @@ public class AsmClassGenerator extends ClassGenerator {
FieldNode field = expression.getField();
ClassNode type = field.getType();
- controller.getOperandStack().doGroovyCast(field);
+ OperandStack operandStack = controller.getOperandStack();
+ operandStack.doGroovyCast(field);
if (field.isHolder() &&
!controller.isInGeneratedFunctionConstructor()) {
- controller.getOperandStack().box();
+ operandStack.box();
mv.visitFieldInsn(GETSTATIC, getFieldOwnerName(field),
field.getName(), BytecodeHelper.getTypeDescription(type));
mv.visitInsn(SWAP);
mv.visitMethodInsn(INVOKEVIRTUAL, "groovy/lang/Reference", "set",
"(Ljava/lang/Object;)V", false);
@@ -1372,7 +1380,7 @@ public class AsmClassGenerator extends ClassGenerator {
mv.visitFieldInsn(PUTSTATIC, getFieldOwnerName(field),
field.getName(), BytecodeHelper.getTypeDescription(type));
}
- controller.getOperandStack().remove(1);
+ operandStack.remove(1);
}
private String getFieldOwnerName(final FieldNode field) {
@@ -1434,17 +1442,18 @@ public class AsmClassGenerator extends ClassGenerator {
private void loadThis(final VariableExpression thisOrSuper) {
MethodVisitor mv = controller.getMethodVisitor();
mv.visitVarInsn(ALOAD, 0);
+ OperandStack operandStack = controller.getOperandStack();
if (controller.isInGeneratedFunction() &&
!controller.getCompileStack().isImplicitThis()) {
mv.visitMethodInsn(INVOKEVIRTUAL, "groovy/lang/Closure",
"getThisObject", "()Ljava/lang/Object;", false);
ClassNode expectedType =
controller.getTypeChooser().resolveType(thisOrSuper,
controller.getOutermostClass());
if (!isObjectType(expectedType) && !isPrimitiveType(expectedType))
{
BytecodeHelper.doCast(mv, expectedType);
- controller.getOperandStack().push(expectedType);
+ operandStack.push(expectedType);
} else {
- controller.getOperandStack().push(ClassHelper.OBJECT_TYPE);
+ operandStack.push(ClassHelper.OBJECT_TYPE);
}
} else {
- controller.getOperandStack().push(controller.getClassNode());
+ operandStack.push(controller.getClassNode());
}
}
@@ -1539,17 +1548,18 @@ public class AsmClassGenerator extends ClassGenerator {
public void visitClassExpression(final ClassExpression expression) {
ClassNode type = expression.getType();
MethodVisitor mv = controller.getMethodVisitor();
+ OperandStack operandStack = controller.getOperandStack();
if (BytecodeHelper.isClassLiteralPossible(type) ||
BytecodeHelper.isSameCompilationUnit(controller.getClassNode(), type)) {
if (controller.getClassNode().isInterface()) {
InterfaceHelperClassNode interfaceClassLoadingClass =
controller.getInterfaceClassLoadingClass();
if
(BytecodeHelper.isClassLiteralPossible(interfaceClassLoadingClass)) {
BytecodeHelper.visitClassLiteral(mv,
interfaceClassLoadingClass);
- controller.getOperandStack().push(ClassHelper.CLASS_Type);
+ operandStack.push(ClassHelper.CLASS_Type);
return;
}
} else {
BytecodeHelper.visitClassLiteral(mv, type);
- controller.getOperandStack().push(ClassHelper.CLASS_Type);
+ operandStack.push(ClassHelper.CLASS_Type);
return;
}
}
@@ -1563,7 +1573,7 @@ public class AsmClassGenerator extends ClassGenerator {
} else {
mv.visitMethodInsn(INVOKESTATIC, internalClassName, "$get$" +
staticFieldName, "()Ljava/lang/Class;", false);
}
- controller.getOperandStack().push(ClassHelper.CLASS_Type);
+ operandStack.push(ClassHelper.CLASS_Type);
}
@Override
@@ -1596,23 +1606,24 @@ public class AsmClassGenerator extends ClassGenerator {
mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
int i = 0;
+ OperandStack operandStack = controller.getOperandStack();
for (MapEntryExpression entry : entries) {
mv.visitInsn(DUP);
BytecodeHelper.pushConstant(mv, i++);
entry.getKeyExpression().visit(this);
- controller.getOperandStack().box();
+ operandStack.box();
mv.visitInsn(AASTORE);
mv.visitInsn(DUP);
BytecodeHelper.pushConstant(mv, i++);
entry.getValueExpression().visit(this);
- controller.getOperandStack().box();
+ operandStack.box();
mv.visitInsn(AASTORE);
- controller.getOperandStack().remove(2);
+ operandStack.remove(2);
}
createMapMethod.call(mv);
- controller.getOperandStack().push(ClassHelper.MAP_TYPE);
+ operandStack.push(ClassHelper.MAP_TYPE);
}
@Override
@@ -1661,16 +1672,17 @@ public class AsmClassGenerator extends ClassGenerator {
BytecodeHelper.pushConstant(mv, size);
mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
+ OperandStack operandStack = controller.getOperandStack();
for (int i = 0; i < size; i += 1) {
mv.visitInsn(DUP);
BytecodeHelper.pushConstant(mv, i);
Expression argument = expression.getExpression(i);
argument.visit(this);
- controller.getOperandStack().box();
+ operandStack.box();
if (useWrapper && argument instanceof CastExpression)
loadWrapper(argument);
mv.visitInsn(AASTORE);
- controller.getOperandStack().remove(1);
+ operandStack.remove(1);
}
}
@@ -1692,6 +1704,7 @@ public class AsmClassGenerator extends ClassGenerator {
int size = 0;
int dimensions = 0;
+ OperandStack operandStack = controller.getOperandStack();
if (expression.hasInitializer()) {
size = expression.getExpressions().size();
BytecodeHelper.pushConstant(mv, size);
@@ -1701,9 +1714,9 @@ public class AsmClassGenerator extends ClassGenerator {
dimensions += 1;
// convert to an int
element.visit(this);
-
controller.getOperandStack().doGroovyCast(ClassHelper.int_TYPE);
+ operandStack.doGroovyCast(ClassHelper.int_TYPE);
}
- controller.getOperandStack().remove(dimensions);
+ operandStack.remove(dimensions);
}
ClassNode arrayType = expression.getType();
@@ -1754,13 +1767,13 @@ public class AsmClassGenerator extends ClassGenerator {
ConstantExpression.NULL.visit(this);
} else {
elementExpression.visit(this);
- controller.getOperandStack().doGroovyCast(elementType);
+ operandStack.doGroovyCast(elementType);
}
mv.visitInsn(storeIns);
- controller.getOperandStack().remove(1);
+ operandStack.remove(1);
}
- controller.getOperandStack().push(arrayType);
+ operandStack.push(arrayType);
}
@Override
@@ -1915,7 +1928,8 @@ public class AsmClassGenerator extends ClassGenerator {
public void visitBytecodeSequence(final BytecodeSequence bytecodeSequence)
{
MethodVisitor mv = controller.getMethodVisitor();
List<?> sequence = bytecodeSequence.getInstructions();
- int mark = controller.getOperandStack().getStackLength();
+ OperandStack operandStack = controller.getOperandStack();
+ int mark = operandStack.getStackLength();
for (Object element : sequence) {
if (element instanceof EmptyExpression) {
@@ -1930,7 +1944,7 @@ public class AsmClassGenerator extends ClassGenerator {
}
}
- controller.getOperandStack().remove(mark -
controller.getOperandStack().getStackLength());
+ operandStack.remove(mark - operandStack.getStackLength());
}
@Override
@@ -1954,7 +1968,7 @@ public class AsmClassGenerator extends ClassGenerator {
operandStack.box();
mv.visitInsn(AASTORE);
}
- controller.getOperandStack().remove(size);
+ operandStack.remove(size);
} else {
List<Expression> expressions = expression.getExpressions();
List<String> methods = new ArrayList<>();
@@ -2009,14 +2023,15 @@ public class AsmClassGenerator extends ClassGenerator {
BytecodeHelper.pushConstant(mv, size);
mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
+ OperandStack operandStack = controller.getOperandStack();
for (int i = 0; i < size; i += 1) {
mv.visitInsn(DUP);
BytecodeHelper.pushConstant(mv, i);
expression.getValue(i).visit(this);
- controller.getOperandStack().box();
+ operandStack.box();
mv.visitInsn(AASTORE);
}
- controller.getOperandStack().remove(size);
+ operandStack.remove(size);
List<ConstantExpression> strings = expression.getStrings();
size = strings.size();
@@ -2026,14 +2041,14 @@ public class AsmClassGenerator extends ClassGenerator {
for (int i = 0; i < size; i += 1) {
mv.visitInsn(DUP);
BytecodeHelper.pushConstant(mv, i);
- controller.getOperandStack().pushConstant(strings.get(i));
- controller.getOperandStack().box();
+ operandStack.pushConstant(strings.get(i));
+ operandStack.box();
mv.visitInsn(AASTORE);
}
- controller.getOperandStack().remove(size);
+ operandStack.remove(size);
mv.visitMethodInsn(INVOKESPECIAL,
"org/codehaus/groovy/runtime/GStringImpl", "<init>",
"([Ljava/lang/Object;[Ljava/lang/String;)V", false);
- controller.getOperandStack().push(ClassHelper.GSTRING_TYPE);
+ operandStack.push(ClassHelper.GSTRING_TYPE);
}
@Override