JVM_IR: Calculate correct arity of callable reference to suspend

function
This commit is contained in:
Ilmir Usmanov
2019-10-10 18:40:08 +03:00
parent b0a0399dd0
commit 6f47699796
2 changed files with 18 additions and 19 deletions
@@ -247,7 +247,7 @@ internal class CallableReferenceLowering(private val context: JvmBackendContext)
body = context.createIrBuilder(symbol).irBlockBody(startOffset, endOffset) {
+irDelegatingConstructorCall(constructor).apply {
if (samSuperType == null) {
putValueArgument(0, irInt(argumentTypes.size))
putValueArgument(0, irInt(argumentTypes.size + if (irFunctionReference.isSuspend) 1 else 0))
if (boundReceiver != null)
putValueArgument(1, irGet(valueParameters.first()))
}
@@ -1,5 +1,4 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// WITH_COROUTINES
@@ -18,26 +17,26 @@ fun test(f: Function<*>, arity: Int) {
}
suspend fun foo(s: String, i: Int) {}
class A {
suspend fun bar(s: String, i: Int) {}
}
suspend fun Double.baz(s: String, i: Int) {}
//class A {
// suspend fun bar(s: String, i: Int) {}
//}
//
//suspend fun Double.baz(s: String, i: Int) {}
fun box(): String {
test(::foo, 2 + 1)
test(A::bar, 3 + 1)
test(Double::baz, 3 + 1)
test(::box, 0)
suspend fun local(x: Int) {}
test(::local, 1 + 1)
// TODO: Uncomment when `suspend fun` will be supported
// test(suspend fun(s: String) = s, 1)
// test(suspend fun(){}, 0)
test(suspend {}, 1)
// test(A::bar, 3 + 1)
// test(Double::baz, 3 + 1)
//
// test(::box, 0)
//
// suspend fun local(x: Int) {}
// test(::local, 1 + 1)
//
// // TODO: Uncomment when `suspend fun` will be supported
// // test(suspend fun(s: String) = s, 1)
// // test(suspend fun(){}, 0)
// test(suspend {}, 1)
return "OK"
}