[JVM_IR] Map suspend lambdas to original function for inlining.

This commit is contained in:
Mads Ager
2019-10-07 12:15:50 +02:00
committed by Ilmir Usmanov
parent 8ef28446cc
commit f9d117970a
5 changed files with 8 additions and 5 deletions
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.jvm.lower.MultifileFacadeFileEntry
import org.jetbrains.kotlin.codegen.BaseExpressionCodegen
import org.jetbrains.kotlin.codegen.ClassBuilder
import org.jetbrains.kotlin.codegen.OwnerKind
import org.jetbrains.kotlin.codegen.coroutines.INVOKE_SUSPEND_METHOD_NAME
import org.jetbrains.kotlin.codegen.inline.*
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
import org.jetbrains.kotlin.codegen.state.GenerationState
@@ -154,7 +155,13 @@ class IrSourceCompilerForInline(
get() = callElement.descriptor as FunctionDescriptor
override fun getContextLabels(): Set<String> {
return setOf(codegen.irFunction.name.asString())
val name = codegen.irFunction.name.asString()
if (name == INVOKE_SUSPEND_METHOD_NAME) {
codegen.context.suspendLambdaToOriginalFunctionMap[codegen.irFunction.parent]?.let {
return setOf(it.name.asString())
}
}
return setOf(name)
}
private class FakeClassCodegen(irFunction: IrFunction, codegen: ClassCodegen) :
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// WITH_RUNTIME
// WITH_COROUTINES
// COMMON_COROUTINES_TEST
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// WITH_RUNTIME
// COMMON_COROUTINES_TEST
// WITH_COROUTINES
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// WITH_RUNTIME
// COMMON_COROUTINES_TEST
// WITH_COROUTINES
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// WITH_RUNTIME
// WITH_COROUTINES
// COMMON_COROUTINES_TEST