This is an automated email from the ASF dual-hosted git repository. sunlan pushed a commit to branch GROOVY_3_0_X in repository https://gitbox.apache.org/repos/asf/groovy.git
commit f149acdf8d387262e13e27e3bf21156e65b68a0f Author: Eric Milles <eric.mil...@thomsonreuters.com> AuthorDate: Fri Feb 14 12:08:39 2020 -0600 add builder for DeclarationExpression (cherry picked from commit 3c054084545ec4fcde79dfb538e6cc7977c26d4c) --- src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java | 6 +++++- .../org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java | 7 ++++--- .../asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java | 5 ++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java index 1685b1b..49b7163 100644 --- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java +++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java @@ -350,7 +350,11 @@ public class GeneralUtils { } public static Statement declS(Expression target, Expression init) { - return new ExpressionStatement(new DeclarationExpression(target, ASSIGN, init)); + return stmt(declX(target, init)); + } + + public static DeclarationExpression declX(Expression target, Expression init) { + return new DeclarationExpression(target, ASSIGN, init); } public static BinaryExpression eqX(Expression lhv, Expression rhv) { diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java index 22d6583..1f7f256 100644 --- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java +++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java @@ -143,7 +143,7 @@ public class BinaryExpressionHelper { public void eval(final BinaryExpression expression) { switch (expression.getOperation().getType()) { - case EQUAL: // = assignment + case EQUAL: // = (aka assignment) evaluateEqual(expression, false); break; @@ -720,7 +720,7 @@ public class BinaryExpressionHelper { VariableSlotLoader usesSubscript = loadWithSubscript(expression); // execute method - execMethodAndStoreForSubscriptOperator(op,method,expression,usesSubscript,orig); + execMethodAndStoreForSubscriptOperator(op, method, expression, usesSubscript, orig); // new value is already on stack, so nothing to do here if (usesSubscript != null) controller.getCompileStack().removeVar(usesSubscript.getIndex()); @@ -771,7 +771,7 @@ public class BinaryExpressionHelper { compileStack.removeVar(resultIdx); } else if (expression instanceof VariableExpression || expression instanceof PropertyExpression || expression instanceof FieldExpression) { - // here we handle a.b++ and a++ + // here we handle a++ and a.b++ controller.getOperandStack().dup(); controller.getCompileStack().pushLHS(true); expression.visit(controller.getAcg()); @@ -794,6 +794,7 @@ public class BinaryExpressionHelper { operandStack.push(ClassHelper.OBJECT_TYPE); // change (receiver,callsite) to (callsite,receiver) operandStack.swap(); + setType(operandStack.getTopOperand()); // no need to keep any of those on the operand stack diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java index 3d1661a..e7961a7 100644 --- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java +++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java @@ -34,7 +34,6 @@ import org.codehaus.groovy.ast.expr.MethodReferenceExpression; import org.codehaus.groovy.ast.expr.PropertyExpression; import org.codehaus.groovy.ast.expr.VariableExpression; import org.codehaus.groovy.ast.stmt.EmptyStatement; -import org.codehaus.groovy.ast.stmt.ExpressionStatement; import org.codehaus.groovy.ast.stmt.ForStatement; import org.codehaus.groovy.ast.tools.WideningCategories; import org.codehaus.groovy.classgen.AsmClassGenerator; @@ -73,7 +72,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.callX; import static org.codehaus.groovy.ast.tools.GeneralUtils.castX; import static org.codehaus.groovy.ast.tools.GeneralUtils.classX; import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX; -import static org.codehaus.groovy.ast.tools.GeneralUtils.declS; +import static org.codehaus.groovy.ast.tools.GeneralUtils.declX; import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX; import static org.codehaus.groovy.ast.tools.GeneralUtils.propX; import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt; @@ -216,7 +215,7 @@ public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpres VariableExpression result = varX(this.getClass().getSimpleName() + "$spreadresult" + counter, ARRAYLIST_CLASSNODE); ConstructorCallExpression newArrayList = ctorX(ARRAYLIST_CLASSNODE); newArrayList.setNodeMetaData(DIRECT_METHOD_CALL_TARGET, ARRAYLIST_CONSTRUCTOR); - Expression decl = ((ExpressionStatement) declS(result, newArrayList)).getExpression(); + Expression decl = declX(result, newArrayList); decl.visit(controller.getAcg()); // if (receiver != null) receiver.visit(controller.getAcg());