Skip to content

Commit cb387d5

Browse files
author
Oleksandr Karpovich
committedMar 5, 2025
CMP-7571: add signatures to artifical stability getters
1 parent f17e609 commit cb387d5

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed
 

‎compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/PartiallyLinkedIrTreePatcher.kt

+20-10
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageCase.*
2626
import org.jetbrains.kotlin.ir.overrides.isEffectivelyPrivate
2727
import org.jetbrains.kotlin.ir.symbols.*
2828
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
29+
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
2930
import org.jetbrains.kotlin.ir.types.IrSimpleType
3031
import org.jetbrains.kotlin.ir.types.IrType
3132
import org.jetbrains.kotlin.ir.types.classOrNull
@@ -528,18 +529,27 @@ internal class PartiallyLinkedIrTreePatcher(
528529
return symbol.owner.name.asString().endsWith(COMPOSE_STABLE_FIELD_MARKER)
529530
}
530531

531-
fun IrFieldSymbol.generateArtificialStabilityGetter(getterName: String, parent: IrDeclarationContainer): IrSimpleFunction {
532+
fun IrFieldSymbol.generateArtificialStabilityGetter(getterName: String, parent: IrDeclarationContainer, parentField: IrField): IrSimpleFunction {
532533

533534
val stabilityField = owner
534535

535-
val stabilityGetter = builtIns.irFactory.buildFun {
536-
startOffset = UNDEFINED_OFFSET
537-
endOffset = UNDEFINED_OFFSET
538-
name = Name.identifier(getterName)
539-
returnType = stabilityField.type
540-
visibility = DescriptorVisibilities.PUBLIC
541-
origin = PartiallyLinkedDeclarationOrigin.AUXILIARY_GENERATED_DECLARATION
542-
}.also { fn ->
536+
val stabilityGetter = builtIns.irFactory.createSimpleFunction(
537+
startOffset = UNDEFINED_OFFSET,
538+
endOffset = UNDEFINED_OFFSET,
539+
name = Name.identifier(getterName),
540+
returnType = stabilityField.type,
541+
visibility = DescriptorVisibilities.PUBLIC,
542+
origin = PartiallyLinkedDeclarationOrigin.AUXILIARY_GENERATED_DECLARATION,
543+
isInline = false,
544+
isExpect = false,
545+
modality = Modality.FINAL,
546+
// k/wasm and k/js rely on signatures, therefore we must set a "unique" signature here
547+
symbol = IrSimpleFunctionSymbolImpl(signature = IdSignature.LoweredDeclarationSignature(parentField.symbol.signature!!, -1, 0)),
548+
isTailrec = false,
549+
isSuspend = false,
550+
isOperator = false,
551+
isInfix = false,
552+
).also { fn ->
543553
fn.parent = parent
544554
fn.body = builtIns.irFactory.createBlockBody(
545555
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
@@ -564,7 +574,7 @@ internal class PartiallyLinkedIrTreePatcher(
564574
return (owner.parent as? IrDeclarationContainer)?.let { parent ->
565575
parent.findDeclaration<IrSimpleFunction> { it.name.asString() == getterFunName }
566576
?: parent.findDeclaration<IrSimpleFunction> { it.name.asString() == artificialGetterFunName } // try to find already-crafted artificial getter
567-
?: generateArtificialStabilityGetter(artificialGetterFunName, parent) // generate one if none found
577+
?: generateArtificialStabilityGetter(artificialGetterFunName, parent, owner) // generate one if none found
568578
}
569579

570580
}

0 commit comments

Comments
 (0)
Please sign in to comment.