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