public static void compileIRStatement(IRStatement statement, IRBytecodeContext context) { if (statement == null) { return; } context.setLineNumber(statement.getLineNumber()); if (statement instanceof IRAssignmentStatement) { IRAssignmentStatementCompiler.compile((IRAssignmentStatement) statement, context); } else if (statement instanceof IRFieldSetStatement) { IRFieldSetStatementCompiler.compile((IRFieldSetStatement) statement, context); } else if (statement instanceof IRIfStatement) { IRIfStatementCompiler.compile((IRIfStatement) statement, context); } else if (statement instanceof IRMethodCallStatement) { IRMethodCallStatementCompiler.compile((IRMethodCallStatement) statement, context); } else if (statement instanceof IRNewStatement) { IRNewStatementCompiler.compile((IRNewStatement) statement, context); } else if (statement instanceof IRNoOpStatement) { // Do nothing } else if (statement instanceof IRReturnStatement) { IRReturnStatementCompiler.compile((IRReturnStatement) statement, context); } else if (statement instanceof IRStatementList) { IRStatementListCompiler.compile((IRStatementList) statement, context); } else if (statement instanceof IRArrayStoreStatement) { IRArrayStoreStatementCompiler.compile((IRArrayStoreStatement) statement, context); } else if (statement instanceof IRThrowStatement) { IRThrowStatementCompiler.compile((IRThrowStatement) statement, context); } else if (statement instanceof IRForEachStatement) { IRForEachStatementCompiler.compile((IRForEachStatement) statement, context); } else if (statement instanceof IRWhileStatement) { IRWhileStatementCompiler.compile((IRWhileStatement) statement, context); } else if (statement instanceof IRDoWhileStatement) { IRDoWhileStatementCompiler.compile((IRDoWhileStatement) statement, context); } else if (statement instanceof IRBreakStatement) { IRBreakStatementCompiler.compile((IRBreakStatement) statement, context); } else if (statement instanceof IRContinueStatement) { IRContinueStatementCompiler.compile((IRContinueStatement) statement, context); } else if (statement instanceof IRTryCatchFinallyStatement) { IRTryCatchFinallyStatementCompiler.compile((IRTryCatchFinallyStatement) statement, context); } else if (statement instanceof IRMonitorLockAcquireStatement) { IRMonitorLockAcquireCompiler.compile((IRMonitorLockAcquireStatement) statement, context); } else if (statement instanceof IRMonitorLockReleaseStatement) { IRMonitorLockReleaseCompiler.compile((IRMonitorLockReleaseStatement) statement, context); } else if (statement instanceof IRSyntheticStatement) { IRSyntheticStatementCompiler.compile((IRSyntheticStatement) statement, context); } else if (statement instanceof IRSwitchStatement) { IRSwitchStatementCompiler.compile((IRSwitchStatement) statement, context); } else if (statement instanceof IREvalStatement) { IREvalStatementCompiler.compile((IREvalStatement) statement, context); } else { throw new IllegalArgumentException("Unrecognized statement of type " + statement.getClass()); } }
private void inlineLocalFinallyStmt(IRStatement tryOrCatchStmt, Label labelEnd) { MethodVisitor mv = _context.getMv(); if (tryOrCatchStmt.getLeastSignificantTerminalStatement() == null) { if (hasFinally()) { _finallyPartitioner.inlineFinally(); NamedLabel endLabel = new NamedLabel("EndFinally" + _finallyPartitioner.getFinallyEnds().size()); _context.visitLabel(endLabel); _finallyPartitioner.endInlineFinally(endLabel); } // Also jump to end of finally mv.visitJumpInsn(Opcodes.GOTO, labelEnd); } }