public void visitIfElse(IfStatement ifElse) { onLineNumber(ifElse, "visitIfElse"); visitStatement(ifElse); ifElse.getBooleanExpression().visit(this); Label l0 = new Label(); mv.visitJumpInsn(IFEQ, l0); // if-else is here handled as a special version // of a booelan expression compileStack.pushBooleanExpression(); ifElse.getIfBlock().visit(this); compileStack.pop(); Label l1 = new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); compileStack.pushBooleanExpression(); ifElse.getElseBlock().visit(this); compileStack.pop(); mv.visitLabel(l1); }
public void visitSwitch(SwitchStatement statement) { onLineNumber(statement, "visitSwitch"); visitStatement(statement); statement.getExpression().visit(this); // switch does not have a continue label. use its parent's for continue Label breakLabel = compileStack.pushSwitch(); int switchVariableIndex = compileStack.defineTemporaryVariable("switch", true); List caseStatements = statement.getCaseStatements(); int caseCount = caseStatements.size(); Label[] labels = new Label[caseCount + 1]; for (int i = 0; i < caseCount; i++) { labels[i] = new Label(); } int i = 0; for (Iterator iter = caseStatements.iterator(); iter.hasNext(); i++) { CaseStatement caseStatement = (CaseStatement) iter.next(); visitCaseStatement(caseStatement, switchVariableIndex, labels[i], labels[i + 1]); } statement.getDefaultStatement().visit(this); mv.visitLabel(breakLabel); compileStack.pop(); }
public void visitSwitch(SwitchStatement statement) { onLineNumber(statement, "visitSwitch"); visitStatement(statement); statement.getExpression().visit(this); // switch does not have a continue label. use its parent's for continue Label breakLabel = compileStack.pushSwitch(); int switchVariableIndex = compileStack.defineTemporaryVariable("switch", true); List caseStatements = statement.getCaseStatements(); int caseCount = caseStatements.size(); Label[] labels = new Label[caseCount + 1]; for (int i = 0; i < caseCount; i++) { labels[i] = new Label(); } int i = 0; for (Iterator iter = caseStatements.iterator(); iter.hasNext(); i++) { CaseStatement caseStatement = (CaseStatement) iter.next(); visitCaseStatement(caseStatement, switchVariableIndex, labels[i], labels[i + 1]); } statement.getDefaultStatement().visit(this); mv.visitLabel(breakLabel); compileStack.pop(); }
public void visitIfElse(IfStatement ifElse) { onLineNumber(ifElse, "visitIfElse"); visitStatement(ifElse); ifElse.getBooleanExpression().visit(this); Label l0 = new Label(); mv.visitJumpInsn(IFEQ, l0); // if-else is here handled as a special version // of a booelan expression compileStack.pushBooleanExpression(); ifElse.getIfBlock().visit(this); compileStack.pop(); Label l1 = new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); compileStack.pushBooleanExpression(); ifElse.getElseBlock().visit(this); compileStack.pop(); mv.visitLabel(l1); }
public void visitBlockStatement(BlockStatement block) { onLineNumber(block, "visitBlockStatement"); visitStatement(block); compileStack.pushVariableScope(block.getVariableScope()); super.visitBlockStatement(block); compileStack.pop(); }
public void visitBlockStatement(BlockStatement block) { onLineNumber(block, "visitBlockStatement"); visitStatement(block); compileStack.pushVariableScope(block.getVariableScope()); super.visitBlockStatement(block); compileStack.pop(); }
public void visitBlockStatement(BlockStatement block) { onLineNumber(block, "visitBlockStatement"); visitStatement(block); compileStack.pushVariableScope(block.getVariableScope()); super.visitBlockStatement(block); compileStack.pop(); }
public void visitSwitch(SwitchStatement statement) { onLineNumber(statement, "visitSwitch"); visitStatement(statement); statement.getExpression().visit(this); // switch does not have a continue label. use its parent's for continue Label breakLabel = compileStack.pushSwitch(); int switchVariableIndex = compileStack.defineTemporaryVariable("switch", true); List caseStatements = statement.getCaseStatements(); int caseCount = caseStatements.size(); Label[] labels = new Label[caseCount + 1]; for (int i = 0; i < caseCount; i++) { labels[i] = new Label(); } int i = 0; for (Iterator iter = caseStatements.iterator(); iter.hasNext(); i++) { CaseStatement caseStatement = (CaseStatement) iter.next(); visitCaseStatement(caseStatement, switchVariableIndex, labels[i], labels[i + 1]); } statement.getDefaultStatement().visit(this); mv.visitLabel(breakLabel); compileStack.pop(); }
public void visitDoWhileLoop(DoWhileStatement loop) { onLineNumber(loop, "visitDoWhileLoop"); visitStatement(loop); compileStack.pushLoop(loop.getStatementLabel()); Label breakLabel = compileStack.getBreakLabel(); Label continueLabel = compileStack.getContinueLabel(); mv.visitLabel(continueLabel); loop.getLoopBlock().visit(this); loop.getBooleanExpression().visit(this); mv.visitJumpInsn(IFEQ, continueLabel); mv.visitLabel(breakLabel); compileStack.pop(); }
public void visitDoWhileLoop(DoWhileStatement loop) { onLineNumber(loop, "visitDoWhileLoop"); visitStatement(loop); compileStack.pushLoop(loop.getStatementLabel()); Label breakLabel = compileStack.getBreakLabel(); Label continueLabel = compileStack.getContinueLabel(); mv.visitLabel(continueLabel); loop.getLoopBlock().visit(this); loop.getBooleanExpression().visit(this); mv.visitJumpInsn(IFEQ, continueLabel); mv.visitLabel(breakLabel); compileStack.pop(); }
/** * return a primitive boolean value of the BooleanExpresion. * * @param expression */ public void visitBooleanExpression(BooleanExpression expression) { compileStack.pushBooleanExpression(); expression.getExpression().visit(this); if (!isComparisonExpression(expression.getExpression())) { // comment out for optimization when boolean values are not autoboxed for eg. function calls. // Class typeClass = expression.getExpression().getTypeClass(); // if (typeClass != null && typeClass != boolean.class) { helper.unbox(boolean.class); // to return a primitive boolean // } } compileStack.pop(); }
/** * return a primitive boolean value of the BooleanExpresion. * * @param expression */ public void visitBooleanExpression(BooleanExpression expression) { compileStack.pushBooleanExpression(); expression.getExpression().visit(this); if (!isComparisonExpression(expression.getExpression())) { // comment out for optimization when boolean values are not autoboxed for eg. function calls. // Class typeClass = expression.getExpression().getTypeClass(); // if (typeClass != null && typeClass != boolean.class) { helper.unbox(boolean.class); // to return a primitive boolean // } } compileStack.pop(); }
/** * return a primitive boolean value of the BooleanExpresion. * * @param expression */ public void visitBooleanExpression(BooleanExpression expression) { compileStack.pushBooleanExpression(); expression.getExpression().visit(this); if (!isComparisonExpression(expression.getExpression())) { // comment out for optimization when boolean values are not autoboxed for eg. function calls. // Class typeClass = expression.getExpression().getTypeClass(); // if (typeClass != null && typeClass != boolean.class) { helper.unbox(boolean.class); // to return a primitive boolean // } } compileStack.pop(); }
public void visitIfElse(IfStatement ifElse) { onLineNumber(ifElse, "visitIfElse"); visitStatement(ifElse); ifElse.getBooleanExpression().visit(this); Label l0 = new Label(); mv.visitJumpInsn(IFEQ, l0); // if-else is here handled as a special version // of a booelan expression compileStack.pushBooleanExpression(); ifElse.getIfBlock().visit(this); compileStack.pop(); Label l1 = new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); compileStack.pushBooleanExpression(); ifElse.getElseBlock().visit(this); compileStack.pop(); mv.visitLabel(l1); }
public void visitWhileLoop(WhileStatement loop) { onLineNumber(loop, "visitWhileLoop"); visitStatement(loop); compileStack.pushLoop(loop.getStatementLabel()); Label continueLabel = compileStack.getContinueLabel(); Label breakLabel = compileStack.getBreakLabel(); mv.visitLabel(continueLabel); Expression bool = loop.getBooleanExpression(); boolean boolHandled = false; if (bool instanceof ConstantExpression) { ConstantExpression constant = (ConstantExpression) bool; if (constant.getValue()==Boolean.TRUE) { boolHandled = true; // do nothing } else if (constant.getValue()==Boolean.FALSE) { boolHandled = true; mv.visitJumpInsn(GOTO, breakLabel); } } if(!boolHandled) { bool.visit(this); mv.visitJumpInsn(IFEQ, breakLabel); } loop.getLoopBlock().visit(this); mv.visitJumpInsn(GOTO, continueLabel); mv.visitLabel(breakLabel); compileStack.pop(); }
public void visitWhileLoop(WhileStatement loop) { onLineNumber(loop, "visitWhileLoop"); visitStatement(loop); compileStack.pushLoop(loop.getStatementLabel()); Label continueLabel = compileStack.getContinueLabel(); Label breakLabel = compileStack.getBreakLabel(); mv.visitLabel(continueLabel); Expression bool = loop.getBooleanExpression(); boolean boolHandled = false; if (bool instanceof ConstantExpression) { ConstantExpression constant = (ConstantExpression) bool; if (constant.getValue()==Boolean.TRUE) { boolHandled = true; // do nothing } else if (constant.getValue()==Boolean.FALSE) { boolHandled = true; mv.visitJumpInsn(GOTO, breakLabel); } } if(!boolHandled) { bool.visit(this); mv.visitJumpInsn(IFEQ, breakLabel); } loop.getLoopBlock().visit(this); mv.visitJumpInsn(GOTO, continueLabel); mv.visitLabel(breakLabel); compileStack.pop(); }
mv.visitLabel(breakLabel); compileStack.pop();
mv.visitLabel(breakLabel); compileStack.pop();
public void visitDoWhileLoop(DoWhileStatement loop) { onLineNumber(loop, "visitDoWhileLoop"); visitStatement(loop); compileStack.pushLoop(loop.getStatementLabel()); Label breakLabel = compileStack.getBreakLabel(); Label continueLabel = compileStack.getContinueLabel(); mv.visitLabel(continueLabel); loop.getLoopBlock().visit(this); loop.getBooleanExpression().visit(this); mv.visitJumpInsn(IFEQ, continueLabel); mv.visitLabel(breakLabel); compileStack.pop(); }
public void visitWhileLoop(WhileStatement loop) { onLineNumber(loop, "visitWhileLoop"); visitStatement(loop); compileStack.pushLoop(loop.getStatementLabel()); Label continueLabel = compileStack.getContinueLabel(); Label breakLabel = compileStack.getBreakLabel(); mv.visitLabel(continueLabel); Expression bool = loop.getBooleanExpression(); boolean boolHandled = false; if (bool instanceof ConstantExpression) { ConstantExpression constant = (ConstantExpression) bool; if (constant.getValue()==Boolean.TRUE) { boolHandled = true; // do nothing } else if (constant.getValue()==Boolean.FALSE) { boolHandled = true; mv.visitJumpInsn(GOTO, breakLabel); } } if(!boolHandled) { bool.visit(this); mv.visitJumpInsn(IFEQ, breakLabel); } loop.getLoopBlock().visit(this); mv.visitJumpInsn(GOTO, continueLabel); mv.visitLabel(breakLabel); compileStack.pop(); }