JVM_IR: Use attributes to find $$forInline version of crossroutine
This way it would not get unlowered version.
This commit is contained in:
@@ -105,7 +105,6 @@ class JvmBackendContext(
|
||||
val continuationClassBuilders = mutableMapOf<IrSimpleFunction, ClassBuilder>()
|
||||
val suspendFunctionOriginalToView = mutableMapOf<IrFunction, IrFunction>()
|
||||
val suspendFunctionViewToOriginal = mutableMapOf<IrFunction, IrFunction>()
|
||||
val originalToForInline = mutableMapOf<IrFunction, IrFunction>()
|
||||
val fakeContinuation: IrExpression = createFakeContinuation(this)
|
||||
|
||||
val staticDefaultStubs = mutableMapOf<IrFunctionSymbol, IrFunction>()
|
||||
|
||||
+7
-6
@@ -22,19 +22,17 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
import org.jetbrains.org.objectweb.asm.*
|
||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
||||
import org.jetbrains.org.objectweb.asm.commons.Method
|
||||
@@ -79,11 +77,14 @@ class IrSourceCompilerForInline(
|
||||
|
||||
private fun makeInlineNode(function: IrFunction, classCodegen: ClassCodegen, isLambda: Boolean): SMAPAndMethodNode {
|
||||
var node: MethodNode? = null
|
||||
val forInlineFunctionView =
|
||||
val forInlineFunction =
|
||||
if (function.isSuspend)
|
||||
codegen.context.originalToForInline[codegen.context.suspendFunctionViewToOriginal[function]] ?: function
|
||||
function.parentAsClass.functions.find {
|
||||
it.name.asString() == function.name.asString() + FOR_INLINE_SUFFIX &&
|
||||
it.attributeOwnerId == (function as? IrAttributeContainer)?.attributeOwnerId
|
||||
} ?: function
|
||||
else function
|
||||
val functionCodegen = object : FunctionCodegen(forInlineFunctionView, classCodegen, codegen.takeIf { isLambda }) {
|
||||
val functionCodegen = object : FunctionCodegen(forInlineFunction, classCodegen, codegen.takeIf { isLambda }) {
|
||||
override fun createMethod(flags: Int, signature: JvmMethodGenericSignature): MethodVisitor {
|
||||
val asmMethod = signature.asmMethod
|
||||
node = MethodNode(
|
||||
|
||||
-3
@@ -571,9 +571,6 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
|
||||
copyAttributes(function)
|
||||
}
|
||||
registerNewFunction(newFunction)
|
||||
if (function.isInline) {
|
||||
context.originalToForInline[function] = newFunction
|
||||
}
|
||||
}
|
||||
|
||||
val newFunction = if (function.isOverridable) {
|
||||
|
||||
Reference in New Issue
Block a user