Fresh box tests
This commit is contained in:
Vendored
+54
@@ -0,0 +1,54 @@
|
||||
// NO_CHECK_LAMBDA_INLINING
|
||||
// FILE: 1.kt
|
||||
// WITH_RUNTIME
|
||||
package test
|
||||
|
||||
open class A(val value: String)
|
||||
|
||||
var invokeOrder = ""
|
||||
|
||||
inline fun inlineFun(
|
||||
receiver: String = { invokeOrder += " default receiver"; "DEFAULT" }(),
|
||||
init: String,
|
||||
vararg constraints: A
|
||||
): String {
|
||||
return constraints.map { it.value }.joinToString() + ", " + receiver + ", " + init
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
import test.*
|
||||
|
||||
|
||||
var result = ""
|
||||
fun box(): String {
|
||||
|
||||
result = ""
|
||||
invokeOrder = ""
|
||||
result = inlineFun(constraints = { invokeOrder += "constraints";A("C") }(),
|
||||
receiver = { invokeOrder += " receiver"; "R" }(),
|
||||
init = { invokeOrder += " init"; "I" }())
|
||||
if (result != "C, R, I") return "fail 1: $result"
|
||||
|
||||
//Change test after KT-17691 FIX
|
||||
if (invokeOrder != " receiver initconstraints") return "fail 2: $invokeOrder"
|
||||
|
||||
result = ""
|
||||
invokeOrder = ""
|
||||
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
|
||||
constraints = { invokeOrder += "constraints";A("C") }(),
|
||||
receiver = { invokeOrder += " receiver"; "R" }()
|
||||
)
|
||||
if (result != "C, R, I") return "fail 3: $result"
|
||||
//Change test after KT-17691 FIX
|
||||
if (invokeOrder != "init receiverconstraints") return "fail 4: $invokeOrder"
|
||||
|
||||
result = ""
|
||||
invokeOrder = ""
|
||||
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
|
||||
constraints = { invokeOrder += " constraints";A("C") }())
|
||||
if (result != "C, DEFAULT, I") return "fail 5: $result"
|
||||
if (invokeOrder != "init constraints default receiver") return "fail 6: $invokeOrder"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
Vendored
+54
@@ -0,0 +1,54 @@
|
||||
// NO_CHECK_LAMBDA_INLINING
|
||||
// FILE: 1.kt
|
||||
// WITH_RUNTIME
|
||||
package test
|
||||
|
||||
open class A(val value: String)
|
||||
|
||||
var invokeOrder = ""
|
||||
|
||||
inline fun inlineFun(
|
||||
vararg constraints: A,
|
||||
receiver: String = { invokeOrder += " default receiver"; "DEFAULT" }(),
|
||||
init: String
|
||||
): String {
|
||||
return constraints.map { it.value }.joinToString() + ", " + receiver + ", " + init
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
import test.*
|
||||
|
||||
|
||||
var result = ""
|
||||
fun box(): String {
|
||||
|
||||
result = ""
|
||||
invokeOrder = ""
|
||||
result = inlineFun(constraints = { invokeOrder += "constraints";A("C") }(),
|
||||
receiver = { invokeOrder += " receiver"; "R" }(),
|
||||
init = { invokeOrder += " init"; "I" }())
|
||||
if (result != "C, R, I") return "fail 1: $result"
|
||||
|
||||
//Change test after KT-17691 FIX
|
||||
if (invokeOrder != " receiver initconstraints") return "fail 2: $invokeOrder"
|
||||
|
||||
result = ""
|
||||
invokeOrder = ""
|
||||
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
|
||||
constraints = { invokeOrder += "constraints";A("C") }(),
|
||||
receiver = { invokeOrder += " receiver"; "R" }()
|
||||
)
|
||||
if (result != "C, R, I") return "fail 3: $result"
|
||||
//Change test after KT-17691 FIX
|
||||
if (invokeOrder != "init receiverconstraints") return "fail 4: $invokeOrder"
|
||||
|
||||
result = ""
|
||||
invokeOrder = ""
|
||||
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
|
||||
constraints = { invokeOrder += " constraints";A("C") }())
|
||||
if (result != "C, DEFAULT, I") return "fail 5: $result"
|
||||
if (invokeOrder != "init constraints default receiver") return "fail 6: $invokeOrder"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
// FILE: 1.kt
|
||||
//NO_CHECK_LAMBDA_INLINING
|
||||
|
||||
package test
|
||||
|
||||
object TimeUtil {
|
||||
inline fun waitForEx(retryWait: Int = 200,
|
||||
action: () -> Boolean) {
|
||||
var now = 1L
|
||||
if (now++ <= 3) {
|
||||
action()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
var result = "fail"
|
||||
|
||||
fun box(): String {
|
||||
TimeUtil.waitForEx(
|
||||
action = {
|
||||
try {
|
||||
result = "OK"
|
||||
true
|
||||
}
|
||||
catch (t: Throwable) {
|
||||
false
|
||||
}
|
||||
})
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
package test
|
||||
|
||||
var result = "fail"
|
||||
|
||||
object TimeUtil {
|
||||
|
||||
fun waitForAssert(z: String) {
|
||||
waitForEx(
|
||||
action = {
|
||||
result = z
|
||||
result
|
||||
})
|
||||
}
|
||||
|
||||
inline fun waitForEx(retryWait: Int = 200,
|
||||
action: () -> String) {
|
||||
var now = 1L
|
||||
now++
|
||||
action()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box(): String {
|
||||
TimeUtil.waitForAssert("OK")
|
||||
return result
|
||||
}
|
||||
+16
@@ -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()
|
||||
}
|
||||
Vendored
+18
@@ -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()
|
||||
}
|
||||
+23
@@ -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"))
|
||||
}
|
||||
+19
@@ -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()
|
||||
}
|
||||
+29
@@ -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()
|
||||
}
|
||||
Vendored
+20
@@ -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")
|
||||
}
|
||||
+16
@@ -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")
|
||||
}
|
||||
+16
@@ -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" })
|
||||
}
|
||||
+16
@@ -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")
|
||||
}
|
||||
Vendored
+16
@@ -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
|
||||
}
|
||||
+16
@@ -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
|
||||
}
|
||||
Vendored
+20
@@ -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
|
||||
}
|
||||
backend.native/tests/external/codegen/boxInline/defaultValues/lambdaInlining/simpleStaticInstance.kt
Vendored
+16
@@ -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()
|
||||
}
|
||||
Vendored
+66
@@ -0,0 +1,66 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
package test
|
||||
|
||||
fun calc() = "OK"
|
||||
|
||||
inline fun test(
|
||||
p1: String = "1",
|
||||
p2: String = "2",
|
||||
p3: String = "3",
|
||||
p4: String = "4",
|
||||
p5: String = "5",
|
||||
p6: String = "6",
|
||||
p7: String = "7",
|
||||
p8: String = "8",
|
||||
p9: String = "9",
|
||||
p10: String = "10",
|
||||
p11: String = "11",
|
||||
p12: String = "12",
|
||||
p13: String = "13",
|
||||
p14: String = "14",
|
||||
p15: String = "15",
|
||||
p16: String = "16",
|
||||
p17: String = "17",
|
||||
p18: String = "18",
|
||||
p19: String = "19",
|
||||
p20: String = "20",
|
||||
p21: String = "21",
|
||||
p22: String = "22",
|
||||
p23: String = "23",
|
||||
p24: String = "24",
|
||||
p25: String = "25",
|
||||
p26: String = "26",
|
||||
p27: String = "27",
|
||||
p28: String = "28",
|
||||
p29: String = "29",
|
||||
p30: String = "30",
|
||||
p31: String = "31",
|
||||
p32: String = "32"
|
||||
): String {
|
||||
return p1 + " " + p2 + " " + p3 + " " + p4 + " " + p5 + " " + p6 + " " +
|
||||
p7 + " " + p8 + " " + p9 + " " + p10 + " " + p11 + " " + p12 + " " + p13 + " " + p14 + " " +
|
||||
p15 + " " + p16 + " " + p17 + " " + p18 + " " + p19 + " " + p20 + " " + p21 + " " +
|
||||
p22 + " " + p23 + " " + p24 + " " + p25 + " " + p26 + " " + p27 + " " + p28 + " " +
|
||||
p29 + " " + p30 + " " + p31 + " " + p32
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box(): String {
|
||||
if (test() != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32")
|
||||
return "fail 1: ${test()}"
|
||||
|
||||
if (test(p20 = "OK") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 OK 21 22 23 24 25 26 27 28 29 30 31 32")
|
||||
return "fail 2: ${test(p20 = "OK")}"
|
||||
|
||||
if (test(p20 = "O", p22 = "K") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 32")
|
||||
return "fail 3: ${test(p20 = "O", p22 = "K")}"
|
||||
|
||||
if (test(p20 = "O", p22 = "K", p32 = "23") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 23")
|
||||
return "fail 4: ${test(p20 = "O", p22 = "K", p32 = "23")}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+70
@@ -0,0 +1,70 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
package test
|
||||
|
||||
fun calc() = "OK"
|
||||
|
||||
inline fun test(
|
||||
p1: String = "1",
|
||||
p2: String = "2",
|
||||
p3: String = "3",
|
||||
p4: String = "4",
|
||||
p5: String = "5",
|
||||
p6: String = "6",
|
||||
p7: String = "7",
|
||||
p8: String = "8",
|
||||
p9: String = "9",
|
||||
p10: String = "10",
|
||||
p11: String = "11",
|
||||
p12: String = "12",
|
||||
p13: String = "13",
|
||||
p14: String = "14",
|
||||
p15: String = "15",
|
||||
p16: String = "16",
|
||||
p17: String = "17",
|
||||
p18: String = "18",
|
||||
p19: String = "19",
|
||||
p20: String = "20",
|
||||
p21: String = "21",
|
||||
p22: String = "22",
|
||||
p23: String = "23",
|
||||
p24: String = "24",
|
||||
p25: String = "25",
|
||||
p26: String = "26",
|
||||
p27: String = "27",
|
||||
p28: String = "28",
|
||||
p29: String = "29",
|
||||
p30: String = "30",
|
||||
p31: String = "31",
|
||||
p32: String = "32",
|
||||
p33: String = "33"
|
||||
): String {
|
||||
return p1 + " " + p2 + " " + p3 + " " + p4 + " " + p5 + " " + p6 + " " +
|
||||
p7 + " " + p8 + " " + p9 + " " + p10 + " " + p11 + " " + p12 + " " + p13 + " " + p14 + " " +
|
||||
p15 + " " + p16 + " " + p17 + " " + p18 + " " + p19 + " " + p20 + " " + p21 + " " +
|
||||
p22 + " " + p23 + " " + p24 + " " + p25 + " " + p26 + " " + p27 + " " + p28 + " " +
|
||||
p29 + " " + p30 + " " + p31 + " " + p32 + " " + p33
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box(): String {
|
||||
if (test() != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33")
|
||||
return "fail 1: ${test()}"
|
||||
|
||||
if (test(p20 = "OK") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 OK 21 22 23 24 25 26 27 28 29 30 31 32 33")
|
||||
return "fail 2: ${test(p20 = "OK")}"
|
||||
|
||||
if (test(p20 = "O", p22 = "K") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 32 33")
|
||||
return "fail 3: ${test(p20 = "O", p22 = "K")}"
|
||||
|
||||
if (test(p20 = "O", p22 = "K", p32 = "23") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 23 33")
|
||||
return "fail 4: ${test(p20 = "O", p22 = "K", p32 = "23")}"
|
||||
|
||||
if (test(p20 = "O", p22 = "K", p32 = "33", p33 ="32") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 33 32")
|
||||
return "fail 4: ${test(p20 = "O", p22 = "K", p32 = "33", p33 ="32")}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
package test
|
||||
|
||||
fun calc() = "OK"
|
||||
|
||||
/*open modifier for method handle check in default method*/
|
||||
open class A {
|
||||
inline fun test(p: String = calc()): String {
|
||||
return p
|
||||
}
|
||||
|
||||
inline fun String.testExt(p: String = "K"): String {
|
||||
return this + p
|
||||
}
|
||||
|
||||
fun callExt(): String {
|
||||
return "O".testExt()
|
||||
}
|
||||
|
||||
fun callExt(arg: String): String {
|
||||
return "O".testExt(arg)
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box() : String {
|
||||
if (A().callExt() != "OK") return "fail 1: ${A().callExt()}"
|
||||
if (A().callExt("O") != "OO") return "fail 2: ${A().callExt("O")}"
|
||||
if (A().test("KK") != "KK") return "fail 3: ${A().test("KK")}"
|
||||
|
||||
return A().test()
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
package test
|
||||
|
||||
inline fun inlineFun(vararg constraints: String, init: String.() -> String): String {
|
||||
return "O".init()
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box(): String {
|
||||
return inlineFun {
|
||||
this + "K"
|
||||
}
|
||||
}
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
package test
|
||||
|
||||
inline fun inlineFun(vararg constraints: String, receiver: String = "O", init: String.() -> String): String {
|
||||
return receiver.init()
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box(): String {
|
||||
return inlineFun {
|
||||
this + "K"
|
||||
}
|
||||
}
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// FILE: 1.kt
|
||||
// WITH_RUNTIME
|
||||
|
||||
package test
|
||||
inline fun inlineFun(vararg constraints: String, receiver: String = "K", init: String.() -> String): String {
|
||||
return (constraints.joinToString() + receiver).init()
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
import test.*
|
||||
|
||||
fun box(): String {
|
||||
return inlineFun("O") {
|
||||
this
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user