@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageCase.*
26
26
import org.jetbrains.kotlin.ir.overrides.isEffectivelyPrivate
27
27
import org.jetbrains.kotlin.ir.symbols.*
28
28
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
29
+ import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
29
30
import org.jetbrains.kotlin.ir.types.IrSimpleType
30
31
import org.jetbrains.kotlin.ir.types.IrType
31
32
import org.jetbrains.kotlin.ir.types.classOrNull
@@ -528,18 +529,27 @@ internal class PartiallyLinkedIrTreePatcher(
528
529
return symbol.owner.name.asString().endsWith(COMPOSE_STABLE_FIELD_MARKER )
529
530
}
530
531
531
- fun IrFieldSymbol.generateArtificialStabilityGetter (getterName : String , parent : IrDeclarationContainer ): IrSimpleFunction {
532
+ fun IrFieldSymbol.generateArtificialStabilityGetter (getterName : String , parent : IrDeclarationContainer , parentField : IrField ): IrSimpleFunction {
532
533
533
534
val stabilityField = owner
534
535
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 ->
543
553
fn.parent = parent
544
554
fn.body = builtIns.irFactory.createBlockBody(
545
555
UNDEFINED_OFFSET , UNDEFINED_OFFSET ,
@@ -564,7 +574,7 @@ internal class PartiallyLinkedIrTreePatcher(
564
574
return (owner.parent as ? IrDeclarationContainer )?.let { parent ->
565
575
parent.findDeclaration<IrSimpleFunction > { it.name.asString() == getterFunName }
566
576
? : 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
568
578
}
569
579
570
580
}
0 commit comments