JVM_IR: KT-40330 Unify field names for captured 'this' with JVM

NB some cases such as captured extension receiver for an extension
lambda are not supported yet; to be discussed, to what extent should we
actually follow JVM code shape here.
This commit is contained in:
Dmitry Petrov
2020-08-18 15:26:36 +03:00
parent 24bfc155af
commit 8f0aecce58
16 changed files with 371 additions and 22 deletions

View File

@@ -0,0 +1,22 @@
class Receiver {
fun foo() {}
}
fun useExtensionLambda(lambda: Receiver.() -> Unit) {
}
fun test() {
useExtensionLambda {
class NamedLocal {
fun run() {
foo()
}
}
}
}
// JVM_TEMPLATES
// 1 final synthetic LReceiver; \$this_useExtensionLambda
// JVM_IR_TEMPLATES
// 1 private final synthetic LReceiver; \$this

View File

@@ -0,0 +1,17 @@
class Receiver {
fun foo() {}
}
fun Receiver.bar() {
class NamedLocal {
fun run() {
foo()
}
}
}
// JVM_TEMPLATES
// 1 final synthetic LReceiver; \$this_bar
// JVM_IR_TEMPLATES
// 1 private final synthetic LReceiver; \$this_bar

View File

@@ -0,0 +1,23 @@
class Outer {
inner class Inner {
private fun bar() {
class NamedLocal {
fun run() {
innerFoo()
outerFoo()
}
}
}
fun innerFoo() {}
}
fun outerFoo() {}
}
// JVM_TEMPLATES
// 1 final synthetic LOuter\$Inner; this\$0
// JVM_IR_TEMPLATES
// 1 private final synthetic LOuter\$Inner; this\$0
// 1 private final synthetic LOuter; this\$1

View File

@@ -0,0 +1,22 @@
class Receiver {
fun foo() {}
}
fun useExtensionLambda(lambda: Receiver.() -> Unit) {
}
fun test() {
useExtensionLambda label@ {
class NamedLocal {
fun run() {
foo()
}
}
}
}
// JVM_TEMPLATES
// 1 final synthetic LReceiver; \$this_label
// JVM_IR_TEMPLATES
// 1 private final synthetic LReceiver; \$this

View File

@@ -0,0 +1,26 @@
class Foo {
fun foo() {}
}
class Bar {
fun bar() {}
}
fun Foo.test(bar: Bar) {
fun Bar.test() {
class Local {
fun run() {
foo()
bar()
}
}
}
}
// JVM_TEMPLATES
// 1 final synthetic LMultipleExtensionReceiversKt\$test\$1; this\$0
// 1 final synthetic LBar; \$this_test
// JVM_IR_TEMPLATES
// 1 private final synthetic LFoo; \$this_test
// 1 private final synthetic LBar; \$this_test\$1

View File

@@ -0,0 +1,19 @@
class Outer {
inner class Inner {
private fun bar() {
class NamedLocal {
fun run() {
foo()
}
}
}
}
fun foo() {}
}
// JVM_TEMPLATES
// 1 final synthetic LOuter\$Inner; this\$0
// JVM_IR_TEMPLATES
// 1 private final synthetic LOuter; this\$0

View File

@@ -0,0 +1,19 @@
class Outer {
inner class Inner {
constructor() {
class NamedLocal {
fun foo() {
outer()
}
}
}
}
fun outer() {}
}
// JVM_TEMPLATES
// 1 final synthetic LOuter\$Inner; this\$0
// JVM_IR_TEMPLATES
// 1 private final synthetic LOuter; this\$0

View File

@@ -0,0 +1,19 @@
class Outer {
inner class Inner {
init {
class NamedLocal {
fun foo() {
outer()
}
}
}
}
fun outer() {}
}
// JVM_TEMPLATES
// 1 final synthetic LOuter\$Inner; this\$0
// JVM_IR_TEMPLATES
// 1 private final synthetic LOuter; this\$0

View File

@@ -0,0 +1,17 @@
class Host {
private fun bar() {
class NamedLocal {
fun run() {
foo()
}
}
}
fun foo() {}
}
// JVM_TEMPLATES
// 1 final synthetic LHost; this\$0
// JVM_IR_TEMPLATES
// 1 private final synthetic LHost; this\$0