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