This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch if-else-asm
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 1b6051118e43a449b08eecbcb08cfd86d56210ba
Author: Eric Milles <[email protected]>
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/asm/StatementWriter.java  | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

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

Reply via email to