Properly capture extension receiver for array convention expressions in object constructor
#KT-19389 Fixed
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
public fun <T, R> myWith(receiver: T, block: T.() -> R): R {
|
||||
return receiver.block()
|
||||
}
|
||||
|
||||
object Foo2 {
|
||||
operator fun Any?.get(key: String) = "OK"
|
||||
}
|
||||
|
||||
object Main {
|
||||
fun bar() = myWith(Foo2) {
|
||||
|
||||
val x = object {
|
||||
val y = 38["Hello!"]
|
||||
}
|
||||
x.y
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return Main.bar()
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
var result = "fail"
|
||||
|
||||
public fun <T, R> myWith(receiver: T, block: T.() -> R): R {
|
||||
return receiver.block()
|
||||
}
|
||||
|
||||
object Foo2 {
|
||||
operator fun Any?.get(key: String) = "OK"
|
||||
operator fun Any?.set(key: String, value: String) {
|
||||
result = value
|
||||
}
|
||||
}
|
||||
|
||||
object Main {
|
||||
fun bar() = myWith(Foo2) {
|
||||
val x = object {
|
||||
init {
|
||||
38["Hello!"] = "OK"
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return Main.bar()
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
// FILE: 1.kt
|
||||
public inline fun <T, R> myWith(receiver: T, block: T.() -> R): R {
|
||||
return receiver.block()
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
//NO_CHECK_LAMBDA_INLINING
|
||||
object Foo2 {
|
||||
operator fun Any?.get(key: String) = "OK"
|
||||
}
|
||||
|
||||
object Main {
|
||||
fun bar() = myWith(Foo2) {
|
||||
|
||||
val x = object {
|
||||
val y = 38["Hello!"]
|
||||
}
|
||||
x.y
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return Main.bar()
|
||||
}
|
||||
Reference in New Issue
Block a user