Fix for KT-9591: Exception on inlining

#KT-9591 Fixed
This commit is contained in:
Michael Bogdanov
2016-01-21 15:04:58 +03:00
parent 53fe1568c9
commit bf16783fb7
5 changed files with 38 additions and 1 deletions
@@ -62,6 +62,7 @@ public class InlineCodegenUtil {
public static final int API = Opcodes.ASM5;
public static final String CAPTURED_FIELD_PREFIX = "$";
public static final String NON_CAPTURED_FIELD_PREFIX = "$$";
public static final String THIS$0 = "this$0";
public static final String THIS = "this";
public static final String RECEIVER$0 = "receiver$0";
@@ -286,7 +287,8 @@ public class InlineCodegenUtil {
public static boolean isCapturedFieldName(@NotNull String fieldName) {
// TODO: improve this heuristic
return fieldName.startsWith(CAPTURED_FIELD_PREFIX) ||
return fieldName.startsWith(CAPTURED_FIELD_PREFIX) &&
!fieldName.startsWith(NON_CAPTURED_FIELD_PREFIX) ||
THIS$0.equals(fieldName) ||
RECEIVER$0.equals(fieldName);
}
@@ -0,0 +1,16 @@
import test.*
public fun box(): String {
var z = "fail"
inlineFun {
val obj = object {
val _delegate by lazy {
z = "OK"
}
}
obj._delegate
}
return z;
}
@@ -0,0 +1,7 @@
package test
inline fun inlineFun(p: () -> Unit) {
p()
}
@@ -139,6 +139,12 @@ public class BlackBoxInlineCodegenTestGenerated extends AbstractBlackBoxInlineCo
doTestMultiFileWithInlineCheck(fileName);
}
@TestMetadata("kt9591.1.kt")
public void testKt9591() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/anonymousObject/kt9591.1.kt");
doTestMultiFileWithInlineCheck(fileName);
}
@TestMetadata("kt9877.1.kt")
public void testKt9877() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/anonymousObject/kt9877.1.kt");
@@ -139,6 +139,12 @@ public class CompileKotlinAgainstInlineKotlinTestGenerated extends AbstractCompi
doBoxTestWithInlineCheck(fileName);
}
@TestMetadata("kt9591.1.kt")
public void testKt9591() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/anonymousObject/kt9591.1.kt");
doBoxTestWithInlineCheck(fileName);
}
@TestMetadata("kt9877.1.kt")
public void testKt9877() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/anonymousObject/kt9877.1.kt");