@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageCase.*
2626import org.jetbrains.kotlin.ir.overrides.isEffectivelyPrivate
2727import org.jetbrains.kotlin.ir.symbols.*
2828import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
29+ import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
2930import org.jetbrains.kotlin.ir.types.IrSimpleType
3031import org.jetbrains.kotlin.ir.types.IrType
3132import 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