JVM: remove functionDescriptor from InlineCodegen
This commit is contained in:
+2
-6
@@ -41,9 +41,7 @@ class IrInlineCodegen(
|
||||
sourceCompiler: SourceCompilerForInline,
|
||||
reifiedTypeInliner: ReifiedTypeInliner<IrType>
|
||||
) :
|
||||
InlineCodegen<ExpressionCodegen>(
|
||||
codegen, state, function.toIrBasedDescriptor(), signature, typeParameterMappings, sourceCompiler, reifiedTypeInliner
|
||||
),
|
||||
InlineCodegen<ExpressionCodegen>(codegen, state, signature, typeParameterMappings, sourceCompiler, reifiedTypeInliner),
|
||||
IrInlineCallGenerator {
|
||||
|
||||
override fun generateAssertFieldIfNeeded(info: RootInliningContext) {
|
||||
@@ -126,8 +124,7 @@ class IrInlineCodegen(
|
||||
expression: IrFunctionAccessExpression,
|
||||
isInsideIfCondition: Boolean,
|
||||
) {
|
||||
// Always look for default lambdas to allow custom default argument handling in compiler plugins.
|
||||
performInline(inlineDefaultLambdas = true, registerLineNumberAfterwards = isInsideIfCondition)
|
||||
performInline(isInsideIfCondition, function.isInlineOnly(), function.isSuspend)
|
||||
}
|
||||
|
||||
override fun genCycleStub(text: String, codegen: ExpressionCodegen) {
|
||||
@@ -135,7 +132,6 @@ class IrInlineCodegen(
|
||||
}
|
||||
|
||||
override fun extractDefaultLambdas(node: MethodNode): List<DefaultLambda> {
|
||||
if (maskStartIndex == -1) return listOf()
|
||||
return expandMaskConditionsAndUpdateVariableNodes(
|
||||
node, maskStartIndex, maskValues, methodHandleInDefaultMethodIndex,
|
||||
extractDefaultLambdaOffsetAndDescriptor(jvmSignature, function),
|
||||
|
||||
+4
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
||||
import org.jetbrains.kotlin.ir.util.isSuspend
|
||||
import org.jetbrains.kotlin.ir.util.kotlinFqName
|
||||
import org.jetbrains.kotlin.ir.util.module
|
||||
import org.jetbrains.kotlin.ir.util.parentAsClass
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
@@ -108,6 +109,9 @@ class IrSourceCompilerForInline(
|
||||
generateInlineIntrinsicForIr(state.languageVersionSettings, callee.toIrBasedDescriptor())?.let {
|
||||
return it
|
||||
}
|
||||
if (jvmSignature.asmMethod.name != callee.name.asString()) {
|
||||
trackLookup(callee.parentAsClass.kotlinFqName, jvmSignature.asmMethod.name) // ?
|
||||
}
|
||||
callee.parentClassId?.let {
|
||||
return loadCompiledInlineFunction(it, jvmSignature.asmMethod, callee.isSuspend, callee.hasMangledReturnType, state)
|
||||
}
|
||||
|
||||
+8
-16
@@ -179,7 +179,7 @@ private fun IrDeclarationWithVisibility.specialCaseVisibility(kind: OwnerKind?):
|
||||
return Opcodes.ACC_PRIVATE
|
||||
}
|
||||
|
||||
if (isInlineOnlyPrivateInBytecode() || isInlineOnlyPropertyAccessor()) {
|
||||
if (isInlineOnlyPrivateInBytecode()) {
|
||||
return Opcodes.ACC_PRIVATE
|
||||
}
|
||||
|
||||
@@ -223,26 +223,18 @@ private tailrec fun isInlineOrContainedInInline(declaration: IrDeclaration?): Bo
|
||||
|
||||
/* Borrowed from inlineOnly.kt */
|
||||
|
||||
fun IrDeclarationWithVisibility.isInlineOnlyOrReifiable(): Boolean =
|
||||
this is IrFunction && (isReifiable() || isInlineOnly())
|
||||
|
||||
fun IrDeclarationWithVisibility.isEffectivelyInlineOnly(): Boolean =
|
||||
isInlineOnlyOrReifiable() || isInlineOnlyPrivateInBytecode() || isInlineOnlyPropertyAccessor()
|
||||
this is IrFunction && (isReifiable() || isInlineOnly() || isPrivateInlineSuspend())
|
||||
|
||||
fun IrDeclarationWithVisibility.isInlineOnlyPrivateInBytecode(): Boolean =
|
||||
(this is IrFunction && isInlineOnly()) || isPrivateInlineSuspend()
|
||||
private fun IrDeclarationWithVisibility.isInlineOnlyPrivateInBytecode(): Boolean =
|
||||
this is IrFunction && (isInlineOnly() || isPrivateInlineSuspend())
|
||||
|
||||
private fun IrDeclarationWithVisibility.isPrivateInlineSuspend(): Boolean =
|
||||
this is IrFunction && isSuspend && isInline && visibility == DescriptorVisibilities.PRIVATE
|
||||
|
||||
private fun IrDeclarationWithVisibility.isInlineOnlyPropertyAccessor(): Boolean {
|
||||
if (this !is IrSimpleFunction) return false
|
||||
val propertySymbol = correspondingPropertySymbol ?: return false
|
||||
return propertySymbol.owner.hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)
|
||||
}
|
||||
private fun IrFunction.isPrivateInlineSuspend(): Boolean =
|
||||
isSuspend && isInline && visibility == DescriptorVisibilities.PRIVATE
|
||||
|
||||
fun IrFunction.isInlineOnly() =
|
||||
isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)
|
||||
(isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME)) ||
|
||||
(this is IrSimpleFunction && correspondingPropertySymbol?.owner?.hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME) == true)
|
||||
|
||||
fun IrFunction.isReifiable() = typeParameters.any { it.isReified }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user