[box-tests] Add tests about anonymous classes uplifting
^KT-50175 Fixed by commits before
This commit is contained in:
committed by
Space
parent
c5eb6fb562
commit
794229d012
+91
@@ -0,0 +1,91 @@
|
||||
// IGNORE_BACKEND: WASM
|
||||
// NO_CHECK_LAMBDA_INLINING
|
||||
|
||||
// FILE: utils.kt
|
||||
fun functionWithLambda(f: (String) -> String): String = f("OK")
|
||||
|
||||
fun functionWithLambda(f: (StringWrapper) -> StringWrapper): StringWrapper = f(StringWrapper("OK"))
|
||||
|
||||
fun <T> genericFunctionWithLambda(f: () -> T): T = f()
|
||||
|
||||
inline fun <T, R> T.testLet(block: (T) -> R): R = block(this)
|
||||
|
||||
inline fun <T> T.testApplyToExtensionReceiver(block: T.() -> Unit): T {
|
||||
block()
|
||||
return this
|
||||
}
|
||||
|
||||
class StringWrapper(val s: String) {
|
||||
inline fun testApplyToDispatchReceiver(block: StringWrapper.() -> Unit): String {
|
||||
block()
|
||||
return s
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T> testApplyToArg0(args: T, block: T.() -> Unit): T {
|
||||
args.block()
|
||||
return args
|
||||
}
|
||||
|
||||
// FILE: testClass.kt
|
||||
class TestClass {
|
||||
val testExtensionReceiver = functionWithLambda { strArg: String ->
|
||||
val anonymousObj = genericFunctionWithLambda {
|
||||
strArg.testLet {
|
||||
object {
|
||||
val strField = it
|
||||
}
|
||||
}
|
||||
}
|
||||
anonymousObj.strField
|
||||
}.testApplyToExtensionReceiver {}
|
||||
|
||||
val testDispatchReceiver = functionWithLambda { strArg: StringWrapper ->
|
||||
val anonymousObj = genericFunctionWithLambda {
|
||||
strArg.testLet {
|
||||
object {
|
||||
val strField = it
|
||||
}
|
||||
}
|
||||
}
|
||||
anonymousObj.strField
|
||||
}.testApplyToDispatchReceiver {}
|
||||
|
||||
val testArg0 = testApplyToArg0(functionWithLambda { strArg: String ->
|
||||
val anonymousObj = genericFunctionWithLambda {
|
||||
strArg.testLet {
|
||||
object {
|
||||
val strField = it
|
||||
}
|
||||
}
|
||||
}
|
||||
anonymousObj.strField
|
||||
}) {}
|
||||
|
||||
val testChain = functionWithLambda { strArg: String ->
|
||||
val anonymousObj = genericFunctionWithLambda {
|
||||
strArg.testLet {
|
||||
object {
|
||||
val strField1 = it
|
||||
}
|
||||
}.testLet {
|
||||
object {
|
||||
val strField2 = it.strField1
|
||||
}
|
||||
}
|
||||
}
|
||||
anonymousObj.strField2
|
||||
}.testApplyToExtensionReceiver {}
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
fun box(): String {
|
||||
val testObject = TestClass()
|
||||
when {
|
||||
testObject.testExtensionReceiver != "OK" -> return "testExtensionReceiver failed"
|
||||
testObject.testDispatchReceiver != "OK" -> return "testDispatchReceiver failed"
|
||||
testObject.testArg0 != "OK" -> return "testArg0 failed"
|
||||
testObject.testChain != "OK" -> return "testChain failed"
|
||||
else -> return "OK"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user