JVM_IR: handle suspend functions for signatures in callable references.

This commit is contained in:
Mads Ager
2020-01-09 15:57:17 +01:00
committed by Ilmir Usmanov
parent 3253907317
commit c47e04ac8d
5 changed files with 5 additions and 5 deletions
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
import org.jetbrains.kotlin.ir.util.collectRealOverrides
import org.jetbrains.kotlin.ir.util.isSuspend
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
/**
@@ -21,7 +22,10 @@ import org.jetbrains.kotlin.resolve.jvm.AsmTypes
object SignatureString : IntrinsicMethod() {
override fun invoke(expression: IrFunctionAccessExpression, codegen: ExpressionCodegen, data: BlockInfo): PromisedValue? {
val function = (expression.getValueArgument(0) as IrFunctionReference).symbol.owner
val resolved = if (function is IrSimpleFunction) function.collectRealOverrides().first() else function
var resolved = if (function is IrSimpleFunction) function.collectRealOverrides().first() else function
if (resolved.isSuspend) {
resolved = codegen.context.suspendFunctionOriginalToView[resolved] ?: resolved
}
val method = codegen.context.methodSignatureMapper.mapAsmMethod(resolved)
val descriptor = method.name + method.descriptor
return object : PromisedValue(codegen, AsmTypes.JAVA_STRING_TYPE, codegen.context.irBuiltIns.stringType) {
@@ -1,5 +1,4 @@
// IGNORE_BACKEND_FIR: JVM_IR
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// WITH_COROUTINES
// WITH_REFLECT
@@ -2,7 +2,6 @@
// WITH_COROUTINES
// WITH_REFLECT
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
import helpers.*
import kotlin.coroutines.*
@@ -1,6 +1,5 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
// FULL_JDK
// WITH_RUNTIME
// WITH_REFLECT
@@ -1,6 +1,5 @@
// !LANGUAGE: +ReleaseCoroutines
// IGNORE_BACKEND_FIR: JVM_IR
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND: JS_IR
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS, NATIVE