Restore accidentally removed parameter index passing to call generator

Parameter index was removed in
 7690a8bc3e commit:
 "Get rid of redundant 'afterParameterPut' method from call generators"

  #KT-17653 Fixed
This commit is contained in:
Mikhael Bogdanov
2017-05-02 14:43:55 +02:00
parent 962bce19a2
commit 84eeed51b1
11 changed files with 251 additions and 13 deletions
@@ -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"
}
@@ -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"
}
+18
View File
@@ -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"
}
}
@@ -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"
}
}
@@ -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
}
}