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());

Reply via email to