JVM_IR: produce better debug messages on inlining failures

That's the only thing `compilationContextDescriptor` is used for; it
clearly shouldn't point to the callee, but to the caller.
This commit is contained in:
pyos
2020-03-20 16:27:21 +01:00
committed by max-kammerer
parent b317187f20
commit bc37a87974
@@ -28,7 +28,7 @@ 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.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
import org.jetbrains.kotlin.ir.util.functions import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.isSuspend import org.jetbrains.kotlin.ir.util.isSuspend
import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.parentAsClass
@@ -46,7 +46,7 @@ import org.jetbrains.org.objectweb.asm.tree.MethodNode
class IrSourceCompilerForInline( class IrSourceCompilerForInline(
override val state: GenerationState, override val state: GenerationState,
override val callElement: IrMemberAccessExpression, override val callElement: IrFunctionAccessExpression,
private val callee: IrFunction, private val callee: IrFunction,
internal val codegen: ExpressionCodegen, internal val codegen: ExpressionCodegen,
private val data: BlockInfo private val data: BlockInfo
@@ -78,7 +78,7 @@ class IrSourceCompilerForInline(
get() = codegen.context.psiSourceManager.getKtFile(codegen.irFunction.fileParent) get() = codegen.context.psiSourceManager.getKtFile(codegen.irFunction.fileParent)
override val contextKind: OwnerKind override val contextKind: OwnerKind
get() = OwnerKind.getMemberOwnerKind(callElement.symbol.descriptor.containingDeclaration!!) get() = OwnerKind.getMemberOwnerKind(callElement.symbol.descriptor.containingDeclaration)
override val inlineCallSiteInfo: InlineCallSiteInfo override val inlineCallSiteInfo: InlineCallSiteInfo
get() { get() {
@@ -118,9 +118,9 @@ class IrSourceCompilerForInline(
} ?: callee } ?: callee
else else
callee callee
val fakeCodegen = FakeClassCodegen(forInlineFunction, codegen.classCodegen) val classCodegen = FakeClassCodegen(forInlineFunction, codegen.classCodegen)
val node = FunctionCodegen(forInlineFunction, fakeCodegen).generate() val node = FunctionCodegen(forInlineFunction, classCodegen).generate()
return SMAPAndMethodNode(node, SMAP(fakeCodegen.getOrCreateSourceMapper().resultMappings)) return SMAPAndMethodNode(node, SMAP(classCodegen.getOrCreateSourceMapper().resultMappings))
} }
override fun hasFinallyBlocks() = data.hasFinallyBlocks() override fun hasFinallyBlocks() = data.hasFinallyBlocks()
@@ -148,10 +148,10 @@ class IrSourceCompilerForInline(
} }
override val compilationContextDescriptor: DeclarationDescriptor override val compilationContextDescriptor: DeclarationDescriptor
get() = callElement.symbol.descriptor get() = compilationContextFunctionDescriptor
override val compilationContextFunctionDescriptor: FunctionDescriptor override val compilationContextFunctionDescriptor: FunctionDescriptor
get() = callElement.symbol.descriptor as FunctionDescriptor get() = generateSequence(codegen) { it.inlinedInto }.last().irFunction.descriptor
override fun getContextLabels(): Set<String> { override fun getContextLabels(): Set<String> {
val name = codegen.irFunction.name.asString() val name = codegen.irFunction.name.asString()