[IR] Supported inlining of adapted references + tests

This commit is contained in:
Igor Chevdar
2021-02-09 13:07:15 +05:00
parent 9724d81a49
commit 6f9bcf249b
16 changed files with 603 additions and 107 deletions
@@ -0,0 +1,17 @@
// DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: BINDING_RECEIVERS
// FILE: 1.kt
package test
inline fun foo(x: () -> Unit): String {
x()
return "OK"
}
inline fun String.id(s: String = this, vararg xs: Int): String = s
// FILE: 2.kt
import test.*
fun box(): String = foo("Fail"::id)
@@ -0,0 +1,19 @@
// DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: STDLIB_TEXT
// !LANGUAGE: +NewInference +FunctionReferenceWithDefaultValueAsOtherType
// WITH_RUNTIME
// KJS_WITH_FULL_RUNTIME
// FILE: 1.kt
package test
inline fun foo(mkString: () -> String): String =
mkString()
inline fun bar (xs: CharArray = charArrayOf('O','K')) =
String(xs)
// FILE: 2.kt
import test.*
fun box(): String = foo(::bar)
@@ -0,0 +1,20 @@
// DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: IGNORED_IN_JS
// !LANGUAGE: +NewInference
// FILE: 1.kt
package test
inline fun foo(f: (Int, Int) -> Int): Int =
f(42, 117)
inline fun bar (vararg xs: Int): Int {
var sum = 0
for (x in xs) sum += x
return sum
}
// FILE: 2.kt
import test.*
fun box(): String = if (foo(::bar) == 159) "OK" else "fail"
@@ -0,0 +1,14 @@
// !LANGUAGE: +NewInference +FunctionReferenceWithDefaultValueAsOtherType
// FILE: 1.kt
package test
inline fun foo(vararg l: Long, s: String = "OK"): String =
if (l.size == 0) s else "Fail"
inline fun bar(f: () -> String): String = f()
// FILE: 2.kt
import test.*
fun box(): String = bar(::foo)
@@ -0,0 +1,18 @@
// !LANGUAGE: +NewInference
// WITH_RUNTIME
// KJS_WITH_FULL_RUNTIME
// FILE: 1.kt
package test
inline fun foo(x: (Int, Int) -> Int): Int =
x(120,3)
inline fun bar(vararg x: Int): Int =
x.sum()
// FILE: 2.kt
import test.*
fun box(): String =
if (foo(::bar) == 123) "OK" else "FAIL"