Add default lambda inlining prototype

This commit is contained in:
Mikhael Bogdanov
2017-05-08 15:28:03 +02:00
parent b7af4ac882
commit 97bcf9f538
23 changed files with 477 additions and 3 deletions
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(crossinline inlineLambda: () -> String = { "OK" }, noinline noInlineLambda: () -> String = { inlineLambda() }): String {
return noInlineLambda()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return inlineFun()
}
@@ -0,0 +1,18 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
fun ok() = "OK"
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> String = ::ok): String {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun()
}
@@ -0,0 +1,23 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
fun ok() = "OK"
class A(val value: String) {
fun ok() = value
}
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(a: A, lambda: (A) -> String = A::ok): String {
return lambda(a)
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun(A("OK"))
}
@@ -0,0 +1,19 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
class A(val value: String) {
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> String = { value }): String {
return lambda()
}
}
// FILE: 2.kt
import test.*
fun box(): String {
return A("OK").inlineFun()
}
@@ -0,0 +1,29 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
//problem in test framework
inline fun inlineFunStub(){}
interface A {
val value: String
fun test() = inlineFun()
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
private inline fun inlineFun(lambda: () -> String = { value }): String {
return lambda()
}
}
// FILE: 2.kt
import test.*
class B : A {
override val value: String = "OK"
}
fun box(): String {
return B().test()
}
@@ -0,0 +1,20 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
//WITH_RUNTIME
package test
object X {
@JvmStatic
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(capturedParam: String, lambda: () -> String = { capturedParam }): String {
return lambda()
}
}
// FILE: 2.kt
import test.*
fun box(): String {
return X.inlineFun("OK")
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
package test
inline fun inlineFun(capturedParam: String, noinline lambda: () -> String = { capturedParam }): String {
return call(lambda)
}
fun call(lambda: () -> String ) = lambda()
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return inlineFun("OK")
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(crossinline inlineLambda: () -> String, noinline noInlineLambda: () -> String = { inlineLambda() }): String {
return noInlineLambda()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return inlineFun ({ "OK" })
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(capturedParam: String, lambda: () -> String = { capturedParam }): String {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun("OK")
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(capturedParam: String, lambda: () -> Any = { capturedParam as Any }): Any {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun("OK") as String
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> Any = { "OK" as Any }): Any {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun() as String
}
@@ -0,0 +1,20 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
open class A(val value: String)
class B(value: String): A(value)
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun <T : A> inlineFun(capturedParam: T, lambda: () -> T = { capturedParam }): T {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun(B("O")).value + inlineFun(A("K")).value
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> String = { "OK" }): String {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun()
}