public LiteralExpression getliteralExpression() { return (LiteralExpression)getExpression(); }
public SwitchBuilder<T> endCase() { return statementHandler.handleStatement(new CaseBlockStatement(line, literalExpression, statements, false)); }
@Override public void visit(CaseBlockStatement caseStatement) { Object value = caseStatement.getExpression() == null ? "default" : caseStatement.getliteralExpression().getValue(); methodByteCodeContext.addLabel(caseStatement.getLine(), currentLabel, "case", value); // TODO: understand Frame ... :( // I use COMPUTE_FRAME in the generator //methodByteCodeContext.addInstruction(new FrameNode(F_SAME, 0, null, 0, null), "case", value); methodByteCodeContext.incIndent("case", value); for (Statement statement : caseStatement.getStatements()) { this.visit(statement); } if (caseStatement.isBreakCase()) { methodByteCodeContext.addInstruction(new JumpInsnNode(GOTO, endLabel), "break case"); } methodByteCodeContext.decIndent(); }
@Override public void visit(SwitchStatement switchStatement) { println("switch (" + toString(switchStatement.getExpression()) + ") { // line " + switchStatement.getLine()); incIndent(); Iterable<CaseStatement> caseStatements = switchStatement.getCaseStatements(); for (CaseStatement caseStatement : caseStatements) { caseStatement.accept(this); } if (switchStatement.getDefaultCaseStatement() != null) { switchStatement.getDefaultCaseStatement().accept(this); } decIndent(); println("}"); }
@Override public void visit(CaseBlockStatement caseStatement) { String caseType; if (caseStatement.getExpression() == null) { caseType = "default"; } else { caseType = "case " + toString(caseStatement.getExpression()); } println(caseType + ": // line " + caseStatement.getLine()); incIndent(); Iterable<Statement> statements = caseStatement.getStatements(); for (Statement statement : statements) { statement.accept(this); } decIndent(); if (caseStatement.isBreakCase()) { println("break;"); } }
switchStatement.getDefaultCaseStatement().accept(this); currentLabel = null; } else {
public SwitchBuilder<T> breakCase() { return statementHandler.handleStatement(new CaseBlockStatement(line, literalExpression, statements, true)); }