Source:
<code>private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame, @Nonnull TypeInsnNode typeInsn) throws IOException { sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeCatchBlockIds(currentCatchList); writer.writeKeyword(Token.EXPRESSION_STATEMENT); writer.writeOpen(); sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.ASG_OPERATION); writer.writeOpen(); writeStackAccess(nextFrame, TOP_OF_STACK); String descriptor = Type.getObjectType(typeInsn.desc).getDescriptor(); switch (typeInsn.getOpcode()) { case NEW: { sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.ALLOC); writer.writeOpen(); writer.writeId(descriptor); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); break; } case ANEWARRAY: { writeNewArray(frame, "[" + descriptor, 1); break; } case INSTANCEOF: { sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.REINTERPRETCAST_OPERATION); writer.writeOpen(); writer.writeId(Type.BOOLEAN_TYPE.getDescriptor()); sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.INSTANCE_OF); writer.writeOpen(); writeStackAccess(frame, TOP_OF_STACK); writer.writeId(descriptor); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); break; } case CHECKCAST: { <START> writeCastOperation(Token.MULTI_CAST_OPERATION, frame, descriptor, TOP_OF_STACK); <END> break; } default: { throw new JillException("Not yet supported " + Printer.OPCODES[typeInsn.getOpcode()]); } } sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); }</code><technical_language>generating multi-cast here? single</technical_language>

Target:
private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame, @Nonnull TypeInsnNode typeInsn) throws IOException { sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeCatchBlockIds(currentCatchList); writer.writeKeyword(Token.EXPRESSION_STATEMENT); writer.writeOpen(); sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.ASG_OPERATION); writer.writeOpen(); writeStackAccess(nextFrame, TOP_OF_STACK); String descriptor = Type.getObjectType(typeInsn.desc).getDescriptor(); switch (typeInsn.getOpcode()) { case NEW: { sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.ALLOC); writer.writeOpen(); writer.writeId(descriptor); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); break; } case ANEWARRAY: { writeNewArray(frame, "[" + descriptor, 1); break; } case INSTANCEOF: { sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.REINTERPRETCAST_OPERATION); writer.writeOpen(); writer.writeId(Type.BOOLEAN_TYPE.getDescriptor()); sourceInfoWriter.writeDebugBegin(currentClass, currentLine); writer.writeKeyword(Token.INSTANCE_OF); writer.writeOpen(); writeStackAccess(frame, TOP_OF_STACK); writer.writeId(descriptor); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); break; } case CHECKCAST: { writeCastOperation(Token.DYNAMIC_CAST_OPERATION, frame, descriptor, TOP_OF_STACK); break; } default: { throw new JillException("Not yet supported " + Printer.OPCODES[typeInsn.getOpcode()]); } } sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); sourceInfoWriter.writeDebugEnd(currentClass, currentLine + 1); writer.writeClose(); }