[JVM] Implement new inlined variable naming format

^KT-65478 fixed
This commit is contained in:
Nikita Nazarov
2023-09-18 16:27:46 +02:00
committed by Alexander Udalov
parent 9ea775cbed
commit 407448d8e3
104 changed files with 88125 additions and 92 deletions
@@ -0,0 +1,25 @@
public final class DeepInlineKt : java/lang/Object {
public final static void block(kotlin.jvm.functions.Function1 block) {
Local variables:
1 $i$f$block: I
0 block: Lkotlin/jvm/functions/Function1;
}
public final static void foo(java.lang.String $this$foo, int count) {
Local variables:
16 $i$a$-block-DeepInlineKt$foo$1$1$1\6\23\4: I
14 $this$foo_u24lambda_u242_u24lambda_u241_u24lambda_u240\6: J
13 $i$f$block\5\12: I
11 $i$a$-block-DeepInlineKt$foo$1$1\4\22\2: I
12 z\4: Z
9 $this$foo_u24lambda_u242_u24lambda_u241\4: J
8 $i$f$block\3\10: I
6 $i$a$-block-DeepInlineKt$foo$1\2\21\0: I
7 y\2: Z
4 $this$foo_u24lambda_u242\2: J
3 $i$f$block\1\8: I
2 x: Z
0 $this$foo: Ljava/lang/String;
1 count: I
}
}
@@ -1,4 +1,5 @@
// IR_DIFFERENCE
// INLINE_SCOPES_DIFFERENCE
// LOCAL_VARIABLE_TABLE
fun String.foo(count: Int) {
@@ -0,0 +1,25 @@
public final class DeepInlineWithLabelsKt : java/lang/Object {
public final static void block(kotlin.jvm.functions.Function1 block) {
Local variables:
1 $i$f$block: I
0 block: Lkotlin/jvm/functions/Function1;
}
public final static void foo(java.lang.String $this$foo, int count) {
Local variables:
16 $i$a$-block-DeepInlineWithLabelsKt$foo$1$1$1\6\23\4: I
14 $this$foo_u24lambda_u242_u24lambda_u241_u24lambda_u240\6: J
13 $i$f$block\5\12: I
11 $i$a$-block-DeepInlineWithLabelsKt$foo$1$1\4\22\2: I
12 z\4: Z
9 $this$foo_u24lambda_u242_u24lambda_u241\4: J
8 $i$f$block\3\10: I
6 $i$a$-block-DeepInlineWithLabelsKt$foo$1\2\21\0: I
7 y\2: Z
4 $this$foo_u24lambda_u242\2: J
3 $i$f$block\1\8: I
2 x: Z
0 $this$foo: Ljava/lang/String;
1 count: I
}
}
@@ -1,4 +1,5 @@
// IR_DIFFERENCE
// INLINE_SCOPES_DIFFERENCE
// LOCAL_VARIABLE_TABLE
fun String.foo(count: Int) {
@@ -0,0 +1,40 @@
public final class Foo$Bar : java/lang/Object {
final Foo this$0
public void <init>(Foo this$0) {
Local variables:
0 this: LFoo$Bar;
1 this$0: LFoo;
}
public final void bar() {
Local variables:
4 $i$a$-block-Foo$Bar$bar$1$1\4\30\2: I
3 $i$f$block\3\18: I
2 $i$a$-block-Foo$Bar$bar$1\2\29\0: I
1 $i$f$block\1\14: I
0 this: LFoo$Bar;
}
}
public final class Foo : java/lang/Object {
public void <init>() {
Local variables:
0 this: LFoo;
}
public final void foo() {
Local variables:
2 $i$a$-block-Foo$foo$1\2\29\0: I
1 $i$f$block\1\7: I
0 this: LFoo;
}
}
public final class InlineClassCaptureKt : java/lang/Object {
public final static void block(kotlin.jvm.functions.Function0 block) {
Local variables:
1 $i$f$block: I
0 block: Lkotlin/jvm/functions/Function0;
}
}
@@ -1,4 +1,5 @@
// IR_DIFFERENCE
// INLINE_SCOPES_DIFFERENCE
// LOCAL_VARIABLE_TABLE
class Foo {
@@ -0,0 +1,17 @@
public final class InlineReceiversKt : java/lang/Object {
public final static void block(kotlin.jvm.functions.Function1 block) {
Local variables:
1 $i$f$block: I
0 block: Lkotlin/jvm/functions/Function1;
}
public final static void foo(java.lang.String $this$foo, int count) {
Local variables:
6 $i$a$-block-InlineReceiversKt$foo$1\2\15\0: I
4 $this$foo_u24lambda_u240\2: J
3 $i$f$block\1\8: I
2 x: Z
0 $this$foo: Ljava/lang/String;
1 count: I
}
}
@@ -1,4 +1,5 @@
// IR_DIFFERENCE
// INLINE_SCOPES_DIFFERENCE
// LOCAL_VARIABLE_TABLE
fun String.foo(count: Int) {
@@ -16,6 +16,8 @@ fun bar() {
// 0 valueOf
// 0 Value\s\(\)
// JVM_TEMPLATES
// 1 LOCALVARIABLE x I (.*) 6
// 1 LOCALVARIABLE y I (.*) 5
// 1 LOCALVARIABLE x J (.*) 7
@@ -33,3 +35,38 @@ fun bar() {
// 1 LOCALVARIABLE x Z (.*) 6
// 1 LOCALVARIABLE y Z (.*) 5
// JVM_IR_TEMPLATES
// 1 LOCALVARIABLE x I (.*) 6
// 1 LOCALVARIABLE y I (.*) 5
// 1 LOCALVARIABLE x J (.*) 7
// 1 LOCALVARIABLE y J (.*) 5
// 1 LOCALVARIABLE x F (.*) 6
// 1 LOCALVARIABLE y F (.*) 5
// 1 LOCALVARIABLE x D (.*) 7
// 1 LOCALVARIABLE y D (.*) 5
// 1 LOCALVARIABLE x B (.*) 6
// 1 LOCALVARIABLE y B (.*) 5
// 1 LOCALVARIABLE x S (.*) 6
// 1 LOCALVARIABLE y S (.*) 5
// 1 LOCALVARIABLE x C (.*) 6
// 1 LOCALVARIABLE y C (.*) 5
// 1 LOCALVARIABLE x Z (.*) 6
// 1 LOCALVARIABLE y Z (.*) 5
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 1 LOCALVARIABLE x\\2 I (.*) 6
// 1 LOCALVARIABLE y\\2 I (.*) 5
// 1 LOCALVARIABLE x\\4 J (.*) 7
// 1 LOCALVARIABLE y\\4 J (.*) 5
// 1 LOCALVARIABLE x\\6 F (.*) 6
// 1 LOCALVARIABLE y\\6 F (.*) 5
// 1 LOCALVARIABLE x\\8 D (.*) 7
// 1 LOCALVARIABLE y\\8 D (.*) 5
// 1 LOCALVARIABLE x\\10 B (.*) 6
// 1 LOCALVARIABLE y\\10 B (.*) 5
// 1 LOCALVARIABLE x\\12 S (.*) 6
// 1 LOCALVARIABLE y\\12 S (.*) 5
// 1 LOCALVARIABLE x\\14 C (.*) 6
// 1 LOCALVARIABLE y\\14 C (.*) 5
// 1 LOCALVARIABLE x\\16 Z (.*) 6
// 1 LOCALVARIABLE y\\16 Z (.*) 5
@@ -5,6 +5,16 @@ suspend inline fun foo(a: A, block: suspend (A) -> String): String = block(a)
// FILE: test.kt
suspend fun test() = foo(A("O", "K")) { (x_param, y_param) -> x_param + y_param }
// JVM_TEMPLATES
// @TestKt.class:
// 1 LOCALVARIABLE x_param Ljava/lang/String;
// 1 LOCALVARIABLE y_param Ljava/lang/String;
// 1 LOCALVARIABLE y_param Ljava/lang/String;
// JVM_IR_TEMPLATES
// @TestKt.class:
// 1 LOCALVARIABLE x_param Ljava/lang/String;
// 1 LOCALVARIABLE y_param Ljava/lang/String;
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 1 LOCALVARIABLE x_param\\2 Ljava/lang/String;
// 1 LOCALVARIABLE y_param\\2 Ljava/lang/String;
@@ -22,4 +22,11 @@ class MyBlockingAdapter() {
}
}
// JVM_TEMPLATES
// 1 LOCALVARIABLE \$this\$extensionFun\$iv\$iv LAtomicInt;
// JVM_IR_TEMPLATES
// 1 LOCALVARIABLE \$this\$extensionFun\$iv\$iv LAtomicInt;
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 1 LOCALVARIABLE \$this\$extensionFun\\2 LAtomicInt;
@@ -11,6 +11,15 @@ fun box() : String {
// 2 LOCALVARIABLE p Ljava/lang/String;
// 2 LOCALVARIABLE x I
// JVM_TEMPLATES
// The $iv suffix should be present in box
// 1 LOCALVARIABLE p\$iv Ljava/lang/String;
// 1 LOCALVARIABLE x\$iv I
// JVM_IR_TEMPLATES
// 1 LOCALVARIABLE p\$iv Ljava/lang/String;
// 1 LOCALVARIABLE x\$iv I
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 1 LOCALVARIABLE p\\1 Ljava/lang/String;
// 1 LOCALVARIABLE x\\1 I
@@ -16,5 +16,13 @@ fun box() : String {
// 0 NULL
//proper variable start label: after assignment
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 1 LOCALVARIABLE p\\1 Ljava/lang/String; L2 L4 0
// JVM_TEMPLATES
// 1 LOCALVARIABLE p\$iv Ljava/lang/String; L2 L4 0
// 1 LDC "OK"\s*ASTORE 0\s*L2
// 1 LDC "OK"\s*ASTORE 0\s*L2
// JVM_IR_TEMPLATES
// 1 LOCALVARIABLE p\$iv Ljava/lang/String; L2 L4 0
// 1 LDC "OK"\s*ASTORE 0\s*L2
@@ -10,6 +10,18 @@ fun box(): String {
return inlineFun<OK>()
}
// JVM_TEMPLATES
// 1 LOCALVARIABLE \$i\$a\$-inlineFun-DefaultLambdaKt\$inlineFun\$1 I
// inlineFun, inlineFun$default, inlined inlineFun:
// 3 LOCALVARIABLE \$i\$f\$inlineFun
// 3 LOCALVARIABLE \$i\$f\$inlineFun
// JVM_IR_TEMPLATES
// 1 LOCALVARIABLE \$i\$a\$-inlineFun-DefaultLambdaKt\$inlineFun\$1 I
// inlineFun, inlineFun$default, inlined inlineFun:
// 3 LOCALVARIABLE \$i\$f\$inlineFun
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 1 LOCALVARIABLE \$i\$a\$-inlineFun-DefaultLambdaKt\$inlineFun\$1\\2\\30\\0 I
// inlineFun, inlineFun$default, inlined inlineFun:
// 1 LOCALVARIABLE \$i\$f\$inlineFun\\1
// 2 LOCALVARIABLE \$i\$f\$inlineFun I
@@ -17,6 +17,14 @@ suspend fun ApplicationCall.test(authenticationService: AuthenticationService) {
respond(authenticationService.execute(receiveJSON()))
}
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 5 ISTORE 3
// 1 ISTORE 2
// 0 ILOAD 3
// 0 ILOAD 2
// 1 \$i\$f\$receiveJSON I .* 2
// 2 \$i\$f\$respond I .* 3
// JVM_TEMPLATES
// $i$f$respond x1, $i$f$receiveJSON x2: before and after suspension point
// 3 ISTORE 5
@@ -5,10 +5,24 @@ fun test() = run {
"OK"
}
// 2 LOCALVARIABLE
// JVM_TEMPLATES
// 1 LOCALVARIABLE tmp I
// 1 LOCALVARIABLE \$i\$a\$-run-NoFakeVariableForInlineOnlyFunWithLambdaKt\$test\$1 I
// 0 LDC 0
// 2 ICONST_0
// 2 ISTORE
// JVM_IR_TEMPLATES
// 1 LOCALVARIABLE tmp I
// 1 LOCALVARIABLE \$i\$a\$-run-NoFakeVariableForInlineOnlyFunWithLambdaKt\$test\$1 I
// 0 LDC 0
// 2 ICONST_0
// 2 ISTORE
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 2 LOCALVARIABLE
// 1 LOCALVARIABLE tmp\\1 I
// 1 LOCALVARIABLE \$i\$a\$-run-NoFakeVariableForInlineOnlyFunWithLambdaKt\$test\$1\\1\\3\\0 I
// 0 LDC 0
// 2 ICONST_0
// 2 ISTORE
@@ -10,7 +10,18 @@ fun test() {
foo(0.0f)
}
// JVM_TEMPLATES
// two in foo and two in test
// 4 ASTORE 2
// 1 LOCALVARIABLE t Ljava/lang/Object;
// 1 LOCALVARIABLE t\$iv Ljava/lang/Object;
// 1 LOCALVARIABLE t\$iv Ljava/lang/Object;
// JVM_IR_TEMPLATES
// 4 ASTORE 2
// 1 LOCALVARIABLE t Ljava/lang/Object;
// 1 LOCALVARIABLE t\$iv Ljava/lang/Object;
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 4 ASTORE 2
// 1 LOCALVARIABLE t Ljava/lang/Object;
// 1 LOCALVARIABLE t\\1 Ljava/lang/Object;
@@ -10,7 +10,18 @@ fun test() {
foo(0.0f)
}
// JVM_TEMPLATES
// two in foo and two in test
// 4 ASTORE 2
// 1 LOCALVARIABLE t Ljava/lang/Object;
// 1 LOCALVARIABLE t\$iv Ljava/lang/Object;
// 1 LOCALVARIABLE t\$iv Ljava/lang/Object;
// JVM_IR_TEMPLATES
// 4 ASTORE 2
// 1 LOCALVARIABLE t Ljava/lang/Object;
// 1 LOCALVARIABLE t\$iv Ljava/lang/Object;
// JVM_IR_TEMPLATES_WITH_INLINE_SCOPES
// 4 ASTORE 2
// 1 LOCALVARIABLE t Ljava/lang/Object;
// 1 LOCALVARIABLE t\\1 Ljava/lang/Object;