You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/01/24 11:58:39 UTC

[groovy] branch master updated: remove push/pop for if/else blocks

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 343c15a  remove push/pop for if/else blocks
343c15a is described below

commit 343c15a949b08430991d35e8666de9c6c75a71dd
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu Jan 23 10:48:15 2020 -0600

    remove push/pop for if/else blocks
    
        if (boolVar) {
        }
    
         3  astore_1
         4  iconst_0
         5  istore_2 [boolVar]
         6  iload_2 [boolVar]  // excess from pushBooleanExpression()
         7  pop                // excess from pop()
         8  iload_2 [boolVar]
---
 .../org/codehaus/groovy/classgen/AsmClassGenerator.java    |  7 ++-----
 .../org/codehaus/groovy/classgen/asm/StatementWriter.java  | 14 ++------------
 2 files changed, 4 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 1f84b60..382fb64 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -814,12 +814,10 @@ public class AsmClassGenerator extends ClassGenerator {
 
     @Override
     public void visitBooleanExpression(final BooleanExpression expression) {
-        controller.getCompileStack().pushBooleanExpression();
         int mark = controller.getOperandStack().getStackLength();
-        Expression inner = expression.getExpression();
-        inner.visit(this);
+
+        expression.getExpression().visit(this);
         controller.getOperandStack().castToBool(mark, true);
-        controller.getCompileStack().pop();
     }
 
     @Override
@@ -839,7 +837,6 @@ public class AsmClassGenerator extends ClassGenerator {
     @Override
     public void visitConstructorCallExpression(final ConstructorCallExpression call) {
         onLineNumber(call, "visitConstructorCallExpression: \"" + call.getType().getName() + "\":");
-
         if (call.isSpecialCall()) {
             controller.getInvocationWriter().writeSpecialConstructorCall(call);
             return;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
index c40fdf8..d3512bf 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/StatementWriter.java
@@ -36,7 +36,6 @@ import org.codehaus.groovy.ast.stmt.CaseStatement;
 import org.codehaus.groovy.ast.stmt.CatchStatement;
 import org.codehaus.groovy.ast.stmt.ContinueStatement;
 import org.codehaus.groovy.ast.stmt.DoWhileStatement;
-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.stmt.IfStatement;
@@ -310,28 +309,19 @@ public class StatementWriter {
         controller.getAcg().onLineNumber(statement, "visitIfElse");
         writeStatementLabel(statement);
 
-        MethodVisitor mv = controller.getMethodVisitor();
-
         statement.getBooleanExpression().visit(controller.getAcg());
         Label l0 = controller.getOperandStack().jump(IFEQ);
-
-        // if-else is here handled as a special version
-        // of a boolean expression
-        controller.getCompileStack().pushBooleanExpression();
         statement.getIfBlock().visit(controller.getAcg());
-        controller.getCompileStack().pop();
 
-        if (statement.getElseBlock() instanceof EmptyStatement) {
+        MethodVisitor mv = controller.getMethodVisitor();
+        if (statement.getElseBlock().isEmpty()) {
             mv.visitLabel(l0);
         } else {
             Label l1 = new Label();
             mv.visitJumpInsn(GOTO, l1);
             mv.visitLabel(l0);
 
-            controller.getCompileStack().pushBooleanExpression();
             statement.getElseBlock().visit(controller.getAcg());
-            controller.getCompileStack().pop();
-
             mv.visitLabel(l1);
         }
     }