Implement inlining of default parameters in JS BE

Fix KT-17910
This commit is contained in:
Alexey Andreev
2017-05-24 19:57:01 +03:00
parent 40bbf82a41
commit 0e31c14a86
24 changed files with 421 additions and 8 deletions
@@ -9,6 +9,7 @@ inline fun inlineFun(crossinline inlineLambda: () -> String = { "OK" }, noinline
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f_0 scope=box
import test.*
fun box(): String {
@@ -14,6 +14,7 @@ class A(val value: String) {
import test.*
// CHECK_CONTAINS_NO_CALLS: box
fun box(): String {
return A("OK").inlineFun()
}
@@ -1,6 +1,7 @@
// FILE: 1.kt
// LANGUAGE_VERSION: 1.2
// SKIP_INLINE_CHECK_IN: inlineFun$default
// CHECK_CONTAINS_NO_CALLS: test
package test
//problem in test framework
@@ -1,6 +1,7 @@
// FILE: 1.kt
// LANGUAGE_VERSION: 1.2
// SKIP_INLINE_CHECK_IN: inlineFun$default
// IGNORE_BACKEND: JS
//WITH_RUNTIME
package test
@@ -9,6 +9,8 @@ fun call(lambda: () -> String ) = lambda()
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=box
// CHECK_CALLED_IN_SCOPE: function=call_h4ejuu$ scope=box
import test.*
fun box(): String {
@@ -9,6 +9,7 @@ inline fun inlineFun(crossinline inlineLambda: () -> String, noinline noInlineLa
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=inlineFun
import test.*
fun box(): String {
@@ -10,6 +10,8 @@ inline fun String.inlineFun(crossinline lambda: () -> String = { this }): String
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f_0 scope=box
import test.*
@@ -10,7 +10,8 @@ inline fun String.inlineFun(crossinline lambda: () -> String, crossinline dlambd
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f_0 scope=test
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=test
import test.*
fun String.test(): String = "INLINE".inlineFun({ this })
@@ -14,6 +14,8 @@ class A(val value: String) {
// FILE: 2.kt
//WITH_RUNTIME
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f_0 scope=box
import test.*
fun box(): String {
@@ -14,6 +14,8 @@ class A(val value: String) {
// FILE: 2.kt
//WIH_RUNTIME
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=test
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f_0 scope=test
import test.*
fun String.test(): String = with(A("VALUE")) { "INLINE".inlineFun({ this@test }) }
@@ -8,6 +8,7 @@ inline fun inlineFun(capturedParam: String, lambda: () -> String = { capturedPar
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box
import test.*
@@ -8,6 +8,7 @@ inline fun inlineFun(capturedParam: String, lambda: () -> Any = { capturedParam
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box except=throwCCE;isType
import test.*
@@ -8,6 +8,7 @@ inline fun inlineFun(lambda: () -> Any = { "OK" as Any }): Any {
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box except=throwCCE;isType
import test.*
@@ -8,6 +8,7 @@ inline fun inlineFun(param: String, lambda: String.() -> String = { this }): Str
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box
import test.*
@@ -12,6 +12,7 @@ inline fun <T : A> inlineFun(capturedParam: T, lambda: () -> T = { capturedParam
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box
import test.*
@@ -8,6 +8,7 @@ inline fun inlineFun(lambda: () -> String = { "OK" }): String {
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box
import test.*
@@ -12,6 +12,8 @@ inline fun String.inlineFun(crossinline lambda: () -> String = { { this }() }):
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f_0 scope=box
import test.*
@@ -15,6 +15,8 @@ class A(val value: String) {
// FILE: 2.kt
//WITH_RUNTIME
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$f_0 scope=box
import test.*
fun box(): String {