List of usage examples for org.objectweb.asm Opcodes ASTORE
int ASTORE
To view the source code for org.objectweb.asm Opcodes ASTORE.
Click Source Link
From source file:org.jacoco.core.internal.analysis.filter.FinallyFilterTest.java
License:Open Source License
/** * <pre>//from w w w . j a v a 2s . c o m * try { * ... * if (...) { * ... * return; * } else { * ... * return; * } * } finally { * ... * } * </pre> */ @Test public void should_analyze_control_flow() { final Label start1 = new Label(); final Label end1 = new Label(); final Label start2 = new Label(); final Label end2 = new Label(); final Label finallyStart = new Label(); m.visitTryCatchBlock(start1, end1, finallyStart, null); m.visitTryCatchBlock(start2, end2, finallyStart, null); m.visitLabel(start1); // jump to another region associated with same handler: m.visitJumpInsn(Opcodes.IFEQ, start2); m.visitInsn(Opcodes.NOP); m.visitLabel(end1); m.visitInsn(Opcodes.NOP); // finally block shouldMergeLast(); m.visitInsn(Opcodes.RETURN); m.visitLabel(start2); m.visitInsn(Opcodes.NOP); m.visitLabel(end2); m.visitInsn(Opcodes.NOP); // finally block shouldMergeLast(); m.visitInsn(Opcodes.RETURN); m.visitLabel(finallyStart); m.visitVarInsn(Opcodes.ASTORE, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.NOP); // finally block shouldMergeLast(); m.visitVarInsn(Opcodes.ALOAD, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.ATHROW); shouldIgnoreLast(); execute(); }
From source file:org.jacoco.core.internal.analysis.filter.FinallyFilterTest.java
License:Open Source License
@Test public void javac_try_catch_finally() { final Label tryStart = new Label(); final Label tryEnd = new Label(); final Label catchStart = new Label(); final Label catchEnd = new Label(); final Label finallyStart = new Label(); final Label finallyEnd = new Label(); m.visitTryCatchBlock(tryStart, tryEnd, catchStart, "java/lang/Exception"); m.visitTryCatchBlock(catchStart, catchEnd, finallyStart, null); m.visitTryCatchBlock(tryStart, tryEnd, finallyStart, null); m.visitLabel(tryStart);// w w w.ja va 2s .com m.visitInsn(Opcodes.NOP); // try body m.visitLabel(tryEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitJumpInsn(Opcodes.GOTO, finallyEnd); shouldIgnoreLast(); m.visitLabel(catchStart); m.visitInsn(Opcodes.NOP); // catch body m.visitLabel(catchEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitInsn(Opcodes.ATHROW); m.visitLabel(finallyStart); m.visitVarInsn(Opcodes.ASTORE, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitVarInsn(Opcodes.ALOAD, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.ATHROW); shouldIgnoreLast(); m.visitLabel(finallyEnd); m.visitInsn(Opcodes.NOP); execute(); }
From source file:org.jacoco.core.internal.analysis.filter.FinallyFilterTest.java
License:Open Source License
@Test public void ecj_try_catch_finally() { final Label tryStart = new Label(); final Label tryEnd = new Label(); final Label catchStart = new Label(); final Label catchEnd = new Label(); final Label finallyStart = new Label(); final Label finallyEnd = new Label(); final Label after = new Label(); m.visitTryCatchBlock(tryStart, tryEnd, catchStart, "java/lang/Exception"); m.visitTryCatchBlock(tryStart, catchEnd, finallyStart, null); m.visitLabel(tryStart);//from w w w .j av a2 s .co m m.visitInsn(Opcodes.NOP); // try body m.visitLabel(tryEnd); m.visitJumpInsn(Opcodes.GOTO, finallyEnd); m.visitLabel(catchStart); m.visitInsn(Opcodes.POP); m.visitInsn(Opcodes.NOP); // catch body m.visitLabel(catchEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitJumpInsn(Opcodes.GOTO, after); shouldIgnoreLast(); m.visitLabel(finallyStart); m.visitVarInsn(Opcodes.ASTORE, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitVarInsn(Opcodes.ALOAD, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.ATHROW); shouldIgnoreLast(); m.visitLabel(finallyEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitLabel(after); m.visitInsn(Opcodes.NOP); execute(); }
From source file:org.jacoco.core.internal.analysis.filter.FinallyFilterTest.java
License:Open Source License
/** * javac 1.5 - 1.7/* ww w . ja v a 2 s. com*/ */ @Test public void javac_empty_catch() { final Label tryStart = new Label(); final Label tryEnd = new Label(); final Label catchStart = new Label(); final Label catchEnd = new Label(); final Label finallyStart = new Label(); final Label finallyEnd = new Label(); m.visitTryCatchBlock(tryStart, tryEnd, catchStart, "java/lang/Exception"); m.visitTryCatchBlock(tryStart, tryEnd, finallyStart, null); m.visitTryCatchBlock(catchStart, catchEnd, finallyStart, null); // actually one more useless TryCatchBlock for ASTORE in finally m.visitLabel(tryStart); m.visitInsn(Opcodes.NOP); // try body m.visitLabel(tryEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitJumpInsn(Opcodes.GOTO, finallyEnd); shouldIgnoreLast(); m.visitLabel(catchStart); m.visitVarInsn(Opcodes.ASTORE, 1); m.visitLabel(catchEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitJumpInsn(Opcodes.GOTO, finallyEnd); shouldIgnoreLast(); m.visitLabel(finallyStart); m.visitVarInsn(Opcodes.ASTORE, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitVarInsn(Opcodes.ALOAD, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.ATHROW); shouldIgnoreLast(); m.visitLabel(finallyEnd); m.visitInsn(Opcodes.NOP); execute(); }
From source file:org.jacoco.core.internal.analysis.filter.FinallyFilterTest.java
License:Open Source License
/** * javac >= 1.8/* w w w. j a v a 2s .c o m*/ * * Probably related to https://bugs.openjdk.java.net/browse/JDK-7093325 */ @Test public void javac_8_empty_catch() throws Exception { final Label tryStart = new Label(); final Label tryEnd = new Label(); final Label catchStart = new Label(); final Label finallyStart = new Label(); final Label finallyEnd = new Label(); m.visitTryCatchBlock(tryStart, tryEnd, catchStart, "java/lang/Exception"); m.visitTryCatchBlock(tryStart, tryEnd, finallyStart, null); m.visitLabel(tryStart); m.visitInsn(Opcodes.NOP); // try body m.visitLabel(tryEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitJumpInsn(Opcodes.GOTO, finallyEnd); shouldIgnoreLast(); shouldIgnoreLast(); m.visitLabel(catchStart); m.visitVarInsn(Opcodes.ASTORE, 1); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitJumpInsn(Opcodes.GOTO, finallyEnd); shouldIgnoreLast(); m.visitLabel(finallyStart); m.visitVarInsn(Opcodes.ASTORE, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitVarInsn(Opcodes.ALOAD, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.ATHROW); shouldIgnoreLast(); m.visitLabel(finallyEnd); execute(); }
From source file:org.jacoco.core.internal.analysis.filter.FinallyFilterTest.java
License:Open Source License
@Test public void ecj_empty_catch() { final Label tryStart = new Label(); final Label tryEnd = new Label(); final Label catchStart = new Label(); final Label catchEnd = new Label(); final Label finallyStart = new Label(); final Label finallyEnd = new Label(); final Label after = new Label(); m.visitTryCatchBlock(tryStart, tryEnd, catchStart, "java/lang/Exception"); m.visitTryCatchBlock(tryStart, catchEnd, finallyStart, null); m.visitLabel(tryStart);//from w w w. j a va 2 s. c o m m.visitInsn(Opcodes.NOP); // try body m.visitLabel(tryEnd); m.visitJumpInsn(Opcodes.GOTO, finallyEnd); m.visitLabel(catchStart); m.visitInsn(Opcodes.POP); m.visitLabel(catchEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitJumpInsn(Opcodes.GOTO, after); shouldIgnoreLast(); m.visitLabel(finallyStart); m.visitVarInsn(Opcodes.ASTORE, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitVarInsn(Opcodes.ALOAD, 1); shouldIgnoreLast(); m.visitInsn(Opcodes.ATHROW); shouldIgnoreLast(); m.visitLabel(finallyEnd); m.visitInsn(Opcodes.NOP); // finally body shouldMergeLast(); m.visitLabel(after); m.visitInsn(Opcodes.NOP); execute(); }
From source file:org.jacoco.core.internal.analysis.filter.FinallyFilterTest.java
License:Open Source License
@Test public void javac_always_completes_abruptly() { final Label tryStart = new Label(); final Label tryEnd = new Label(); final Label finallyStart = new Label(); m.visitTryCatchBlock(tryStart, tryEnd, finallyStart, null); m.visitLabel(tryStart);//from w w w . j a v a 2 s . c om m.visitInsn(Opcodes.NOP); // try body m.visitLabel(tryEnd); m.visitInsn(Opcodes.RETURN); // finally body m.visitLabel(finallyStart); m.visitVarInsn(Opcodes.ASTORE, 1); m.visitInsn(Opcodes.RETURN); // finally body execute(); }
From source file:org.jacoco.core.internal.analysis.filter.KotlinCoroutineFilterTest.java
License:Open Source License
@Test public void should_filter_suspending_lambdas_generated_by_Kotlin_1_3_30() { final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0, "invokeSuspend", "(Ljava/lang/Object;)Ljava/lang/Object;", null, null); context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC); m.visitLabel(new Label()); final Range range1 = new Range(); range1.fromInclusive = m.instructions.getLast(); m.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/coroutines/intrinsics/IntrinsicsKt", "getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false); m.visitVarInsn(Opcodes.ASTORE, 4); m.visitVarInsn(Opcodes.ALOAD, 0);/*from ww w . j av a 2 s . c o m*/ // line of "runBlocking" m.visitFieldInsn(Opcodes.GETFIELD, "Target", "label", "I"); final Label dflt = new Label(); final Label state0 = new Label(); final Label state1 = new Label(); m.visitTableSwitchInsn(0, 1, dflt, state0, state1); m.visitLabel(state0); { m.visitVarInsn(Opcodes.ALOAD, 1); m.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/ResultKt", "throwOnFailure", "(Ljava/lang/Object;)V", false); range1.toInclusive = m.instructions.getLast(); } // line before "suspendingFunction" m.visitInsn(Opcodes.NOP); // line of "suspendingFunction" m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "", "suspendingFunction", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", false); m.visitInsn(Opcodes.DUP); final Range range2 = new Range(); range2.fromInclusive = m.instructions.getLast(); m.visitVarInsn(Opcodes.ALOAD, 4); final Label continuationLabelAfterLoadedResult = new Label(); m.visitJumpInsn(Opcodes.IF_ACMPNE, continuationLabelAfterLoadedResult); // line of "runBlocking" m.visitVarInsn(Opcodes.ALOAD, 4); m.visitInsn(Opcodes.ARETURN); m.visitLabel(state1); m.visitVarInsn(Opcodes.ALOAD, 0); m.visitFieldInsn(Opcodes.GETFIELD, "Target", "I$0", "I"); m.visitVarInsn(Opcodes.ISTORE, 3); { m.visitVarInsn(Opcodes.ALOAD, 1); m.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/ResultKt", "throwOnFailure", "(Ljava/lang/Object;)V", false); } m.visitVarInsn(Opcodes.ALOAD, 1); range2.toInclusive = m.instructions.getLast(); m.visitLabel(continuationLabelAfterLoadedResult); // line after "suspendingFunction" m.visitInsn(Opcodes.NOP); m.visitInsn(Opcodes.ARETURN); m.visitLabel(dflt); final Range range0 = new Range(); range0.fromInclusive = m.instructions.getLast(); m.visitTypeInsn(Opcodes.NEW, "java/lang/IllegalStateException"); m.visitInsn(Opcodes.DUP); m.visitLdcInsn("call to 'resume' before 'invoke' with coroutine"); m.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/IllegalStateException", "<init>", "(Ljava/lang/String;)V", false); m.visitInsn(Opcodes.ATHROW); range0.toInclusive = m.instructions.getLast(); filter.filter(m, context, output); assertIgnored(range0, range1, range2); }
From source file:org.jacoco.core.internal.analysis.filter.KotlinCoroutineFilterTest.java
License:Open Source License
/** * <pre>/* w w w. jav a2s . co m*/ * runBlocking { * val x = 42 * nop(x) * suspendingFunction() * nop(x) * } * </pre> */ @Test public void should_filter_suspending_lambdas() { final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0, "invokeSuspend", "(Ljava/lang/Object;)Ljava/lang/Object;", null, null); context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC); m.visitLabel(new Label()); final Range range1 = new Range(); range1.fromInclusive = m.instructions.getLast(); m.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/coroutines/intrinsics/IntrinsicsKt", "getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false); m.visitVarInsn(Opcodes.ASTORE, 4); m.visitVarInsn(Opcodes.ALOAD, 0); // line of "runBlocking" m.visitFieldInsn(Opcodes.GETFIELD, "Target", "label", "I"); final Label dflt = new Label(); final Label state0 = new Label(); final Label state1 = new Label(); m.visitTableSwitchInsn(0, 1, dflt, state0, state1); m.visitLabel(state0); { m.visitVarInsn(Opcodes.ALOAD, 1); m.visitInsn(Opcodes.DUP); m.visitTypeInsn(Opcodes.INSTANCEOF, "kotlin/Result$Failure"); Label label = new Label(); m.visitJumpInsn(Opcodes.IFEQ, label); m.visitTypeInsn(Opcodes.CHECKCAST, "kotlin/Result$Failure"); m.visitFieldInsn(Opcodes.GETFIELD, "kotlin/Result$Failure", "exception", "Ljava/lang/Throwable"); m.visitInsn(Opcodes.ATHROW); m.visitInsn(Opcodes.POP); range1.toInclusive = m.instructions.getLast(); m.visitLabel(label); } // line before "suspendingFunction" m.visitInsn(Opcodes.NOP); // line of "suspendingFunction" m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "", "suspendingFunction", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", false); m.visitInsn(Opcodes.DUP); final Range range2 = new Range(); range2.fromInclusive = m.instructions.getLast(); m.visitVarInsn(Opcodes.ALOAD, 4); final Label continuationLabelAfterLoadedResult = new Label(); m.visitJumpInsn(Opcodes.IF_ACMPNE, continuationLabelAfterLoadedResult); // line of "runBlocking" m.visitVarInsn(Opcodes.ALOAD, 4); m.visitInsn(Opcodes.ARETURN); m.visitLabel(state1); m.visitVarInsn(Opcodes.ALOAD, 0); m.visitFieldInsn(Opcodes.GETFIELD, "Target", "I$0", "I"); m.visitVarInsn(Opcodes.ISTORE, 3); { m.visitVarInsn(Opcodes.ALOAD, 1); m.visitInsn(Opcodes.DUP); m.visitTypeInsn(Opcodes.INSTANCEOF, "kotlin/Result$Failure"); final Label label = new Label(); m.visitJumpInsn(Opcodes.IFEQ, label); m.visitTypeInsn(Opcodes.CHECKCAST, "kotlin/Result$Failure"); m.visitFieldInsn(Opcodes.GETFIELD, "kotlin/Result$Failure", "exception", "Ljava/lang/Throwable"); m.visitInsn(Opcodes.ATHROW); m.visitInsn(Opcodes.POP); m.visitLabel(label); } m.visitVarInsn(Opcodes.ALOAD, 1); range2.toInclusive = m.instructions.getLast(); m.visitLabel(continuationLabelAfterLoadedResult); // line after "suspendingFunction" m.visitInsn(Opcodes.NOP); m.visitInsn(Opcodes.ARETURN); m.visitLabel(dflt); final Range range0 = new Range(); range0.fromInclusive = m.instructions.getLast(); m.visitTypeInsn(Opcodes.NEW, "java/lang/IllegalStateException"); m.visitInsn(Opcodes.DUP); m.visitLdcInsn("call to 'resume' before 'invoke' with coroutine"); m.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/IllegalStateException", "<init>", "(Ljava/lang/String;)V", false); m.visitInsn(Opcodes.ATHROW); range0.toInclusive = m.instructions.getLast(); filter.filter(m, context, output); assertIgnored(range0, range1, range2); }
From source file:org.jacoco.core.internal.analysis.filter.KotlinCoroutineFilterTest.java
License:Open Source License
/** * <pre>/*w w w .j a v a2 s . c om*/ * suspend fun example() { * suspendingFunction() * nop() * } * </pre> */ @Test public void should_filter_suspending_functions() { final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, Opcodes.ACC_STATIC, "example", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", null, null); context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC); final int continuationArgumentIndex = 0; final int continuationIndex = 2; m.visitVarInsn(Opcodes.ALOAD, continuationArgumentIndex); final Range range1 = new Range(); range1.fromInclusive = m.instructions.getLast(); m.visitTypeInsn(Opcodes.INSTANCEOF, "ExampleKt$example$1"); final Label createStateInstance = new Label(); m.visitJumpInsn(Opcodes.IFEQ, createStateInstance); m.visitVarInsn(Opcodes.ALOAD, continuationArgumentIndex); m.visitTypeInsn(Opcodes.CHECKCAST, "ExampleKt$example$1"); m.visitVarInsn(Opcodes.ASTORE, continuationIndex); m.visitVarInsn(Opcodes.ALOAD, continuationIndex); m.visitFieldInsn(Opcodes.GETFIELD, "ExampleKt$example$1", "label", "I"); m.visitLdcInsn(Integer.valueOf(Integer.MIN_VALUE)); m.visitInsn(Opcodes.IAND); m.visitJumpInsn(Opcodes.IFEQ, createStateInstance); m.visitVarInsn(Opcodes.ALOAD, continuationIndex); m.visitInsn(Opcodes.DUP); m.visitFieldInsn(Opcodes.GETFIELD, "ExampleKt$example$1", "label", "I"); m.visitLdcInsn(Integer.valueOf(Integer.MIN_VALUE)); m.visitInsn(Opcodes.ISUB); m.visitFieldInsn(Opcodes.PUTFIELD, "ExampleKt$example$1", "label", "I"); final Label afterCoroutineStateCreated = new Label(); m.visitJumpInsn(Opcodes.GOTO, afterCoroutineStateCreated); m.visitLabel(createStateInstance); m.visitTypeInsn(Opcodes.NEW, "ExampleKt$example$1"); m.visitInsn(Opcodes.DUP); m.visitVarInsn(Opcodes.ALOAD, continuationArgumentIndex); m.visitMethodInsn(Opcodes.INVOKESPECIAL, "ExampleKt$example$1", "<init>", "(Lkotlin/coroutines/Continuation;)V", false); m.visitVarInsn(Opcodes.ASTORE, continuationIndex); m.visitLabel(afterCoroutineStateCreated); m.visitVarInsn(Opcodes.ALOAD, continuationIndex); m.visitFieldInsn(Opcodes.GETFIELD, "ExampleKt$example$1", "result", "Ljava/lang/Object;"); m.visitVarInsn(Opcodes.ASTORE, 1); m.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/coroutines/intrinsics/IntrinsicsKt", "getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false); // line of "fun" m.visitVarInsn(Opcodes.ASTORE, 3); m.visitVarInsn(Opcodes.ALOAD, continuationIndex); m.visitFieldInsn(Opcodes.GETFIELD, "ExampleKt$example$1", "label", "I"); final Label dflt = new Label(); final Label state0 = new Label(); final Label state1 = new Label(); m.visitTableSwitchInsn(0, 1, dflt, state0, state1); m.visitLabel(state0); { m.visitVarInsn(Opcodes.ALOAD, 1); m.visitInsn(Opcodes.DUP); m.visitTypeInsn(Opcodes.INSTANCEOF, "kotlin/Result$Failure"); Label label = new Label(); m.visitJumpInsn(Opcodes.IFEQ, label); m.visitTypeInsn(Opcodes.CHECKCAST, "kotlin/Result$Failure"); m.visitFieldInsn(Opcodes.GETFIELD, "kotlin/Result$Failure", "exception", "Ljava/lang/Throwable"); m.visitInsn(Opcodes.ATHROW); m.visitInsn(Opcodes.POP); range1.toInclusive = m.instructions.getLast(); m.visitLabel(label); } // line of "suspendingFunction" m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "", "suspendingFunction", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", false); m.visitInsn(Opcodes.DUP); final Range range2 = new Range(); range2.fromInclusive = m.instructions.getLast(); m.visitVarInsn(Opcodes.ALOAD, 3); final Label continuationLabelAfterLoadedResult = new Label(); m.visitJumpInsn(Opcodes.IF_ACMPNE, continuationLabelAfterLoadedResult); // line of "fun" m.visitVarInsn(Opcodes.ALOAD, 3); m.visitInsn(Opcodes.ARETURN); m.visitLabel(state1); { m.visitVarInsn(Opcodes.ALOAD, 1); m.visitInsn(Opcodes.DUP); m.visitTypeInsn(Opcodes.INSTANCEOF, "kotlin/Result$Failure"); final Label label = new Label(); m.visitJumpInsn(Opcodes.IFEQ, label); m.visitTypeInsn(Opcodes.CHECKCAST, "kotlin/Result$Failure"); m.visitFieldInsn(Opcodes.GETFIELD, "kotlin/Result$Failure", "exception", "Ljava/lang/Throwable"); m.visitInsn(Opcodes.ATHROW); m.visitInsn(Opcodes.POP); m.visitLabel(label); } m.visitVarInsn(Opcodes.ALOAD, 1); range2.toInclusive = m.instructions.getLast(); m.visitLabel(continuationLabelAfterLoadedResult); // line after "suspendingFunction" m.visitInsn(Opcodes.NOP); m.visitInsn(Opcodes.ARETURN); m.visitLabel(dflt); final Range range0 = new Range(); range0.fromInclusive = m.instructions.getLast(); m.visitTypeInsn(Opcodes.NEW, "java/lang/IllegalStateException"); m.visitInsn(Opcodes.DUP); m.visitLdcInsn("call to 'resume' before 'invoke' with coroutine"); m.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/IllegalStateException", "<init>", "(Ljava/lang/String;)V", false); m.visitInsn(Opcodes.ATHROW); range0.toInclusive = m.instructions.getLast(); filter.filter(m, context, output); assertIgnored(range0, range1, range2); }