Don't delete nested default lambda classes during inline transformation

This commit is contained in:
Mikhael Bogdanov
2017-12-21 10:04:02 +01:00
parent b65dcf27ee
commit 50608d0844
14 changed files with 350 additions and 2 deletions
@@ -0,0 +1,17 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
package test
inline fun test(p: String, s: () -> () -> String = { { p } }) =
s()
val same = test("O")
// FILE: 2.kt
import test.*
fun box(): String {
val inlined = test("K")
return same() + inlined()
}
@@ -0,0 +1,17 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
package test
inline fun test(p: String, s: () -> () -> () -> String = { { { p } } }) =
s()
val same = test("O")
// FILE: 2.kt
import test.*
fun box(): String {
val inlined = test("K")
return same()() + inlined()()
}
@@ -0,0 +1,24 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
package test
interface Call {
fun run(): String
}
inline fun test(p: String, s: () -> Call = {
object : Call {
override fun run() = p
} as Call
}) = s()
val same = test("O")
// FILE: 2.kt
import test.*
fun box(): String {
val inlined = test("K")
return same.run() + inlined.run()
}
@@ -0,0 +1,18 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
package test
inline fun test(s: () -> () -> String = { { "OK" } }) =
s()
val same = test()
// FILE: 2.kt
import test.*
fun box(): String {
val inlined = test()
if (same() != "OK") return "fail 1: ${same()}"
return inlined()
}
@@ -0,0 +1,18 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
package test
inline fun test(s: () -> () -> () -> String = { { { "OK" } } }) =
s()
val same = test()
// FILE: 2.kt
import test.*
fun box(): String {
val inlined = test()
if (same()() != "OK") return "fail 1: ${same()()}"
return inlined()()
}
@@ -0,0 +1,25 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
package test
interface Call {
fun run(): String
}
inline fun test(s: () -> Call = {
object : Call {
override fun run() = "OK"
} as Call
}) = s()
val same = test()
// FILE: 2.kt
import test.*
fun box(): String {
val inlined = test()
if (same.run() != "OK") return "fail 1: ${same.run()}"
return inlined.run()
}
@@ -0,0 +1,17 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
package test
inline fun <T> test(p: T, s: () -> () -> T = { { p } }) =
s()
val same = test("O")
// FILE: 2.kt
import test.*
fun box(): String {
val inlined = test("K")
return same() + inlined()
}