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 continuationClassBuilders = mutableMapOf<IrSimpleFunction, ClassBuilder>()
|
||||||
val suspendFunctionOriginalToView = mutableMapOf<IrFunction, IrFunction>()
|
val suspendFunctionOriginalToView = mutableMapOf<IrFunction, IrFunction>()
|
||||||
val suspendFunctionViewToOriginal = mutableMapOf<IrFunction, IrFunction>()
|
val suspendFunctionViewToOriginal = mutableMapOf<IrFunction, IrFunction>()
|
||||||
val originalToForInline = mutableMapOf<IrFunction, IrFunction>()
|
|
||||||
val fakeContinuation: IrExpression = createFakeContinuation(this)
|
val fakeContinuation: IrExpression = createFakeContinuation(this)
|
||||||
|
|
||||||
val staticDefaultStubs = mutableMapOf<IrFunctionSymbol, IrFunction>()
|
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.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
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.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
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.expressions.IrMemberAccessExpression
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
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.*
|
||||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
||||||
import org.jetbrains.org.objectweb.asm.commons.Method
|
import org.jetbrains.org.objectweb.asm.commons.Method
|
||||||
@@ -79,11 +77,14 @@ class IrSourceCompilerForInline(
|
|||||||
|
|
||||||
private fun makeInlineNode(function: IrFunction, classCodegen: ClassCodegen, isLambda: Boolean): SMAPAndMethodNode {
|
private fun makeInlineNode(function: IrFunction, classCodegen: ClassCodegen, isLambda: Boolean): SMAPAndMethodNode {
|
||||||
var node: MethodNode? = null
|
var node: MethodNode? = null
|
||||||
val forInlineFunctionView =
|
val forInlineFunction =
|
||||||
if (function.isSuspend)
|
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
|
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 {
|
override fun createMethod(flags: Int, signature: JvmMethodGenericSignature): MethodVisitor {
|
||||||
val asmMethod = signature.asmMethod
|
val asmMethod = signature.asmMethod
|
||||||
node = MethodNode(
|
node = MethodNode(
|
||||||
|
|||||||
-3
@@ -571,9 +571,6 @@ private class AddContinuationLowering(private val context: JvmBackendContext) :
|
|||||||
copyAttributes(function)
|
copyAttributes(function)
|
||||||
}
|
}
|
||||||
registerNewFunction(newFunction)
|
registerNewFunction(newFunction)
|
||||||
if (function.isInline) {
|
|
||||||
context.originalToForInline[function] = newFunction
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val newFunction = if (function.isOverridable) {
|
val newFunction = if (function.isOverridable) {
|
||||||
|
|||||||
Reference in New Issue
Block a user