diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt index cad9a89467b..2605b077207 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Context.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.backend.konan.ir.KonanIr import org.jetbrains.kotlin.backend.konan.llvm.* import org.jetbrains.kotlin.backend.konan.llvm.coverage.CoverageManager import org.jetbrains.kotlin.backend.konan.lower.BridgesSupport +import org.jetbrains.kotlin.backend.konan.lower.InlineFunctionsSupport import org.jetbrains.kotlin.backend.konan.lower.InnerClassesSupport import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExport import org.jetbrains.kotlin.backend.konan.optimizations.DevirtualizationAnalysis @@ -51,15 +52,17 @@ import java.lang.System.out import kotlin.LazyThreadSafetyMode.PUBLICATION import kotlin.reflect.KProperty +internal class InlineFunctionOriginInfo(val irFunction: IrFunction, val irFile: IrFile, val startOffset: Int, val endOffset: Int) + internal class NativeMapping : DefaultMapping() { data class BridgeKey(val target: IrSimpleFunction, val bridgeDirections: BridgeDirections) val outerThisFields = DefaultDelegateFactory.newDeclarationToDeclarationMapping() val bridges = mutableMapOf() + val notLoweredInlineFunctions = mutableMapOf() + val loweredInlineFunctions = mutableMapOf() } -internal class InlineFunctionOriginInfo(val irFunction: IrFunction, val irFile: IrFile, val startOffset: Int, val endOffset: Int) - /** * Offset for synthetic elements created by lowerings and not attributable to other places in the source code. */ @@ -69,14 +72,6 @@ internal class SpecialDeclarationsFactory(val context: Context) { private val internalLoweredEnums = mutableMapOf() private val externalLoweredEnums = mutableMapOf() - private val notLoweredInlineFunctions = mutableMapOf() - val loweredInlineFunctions = mutableMapOf() - fun getNonLoweredInlineFunction(function: IrFunction): IrFunction { - return notLoweredInlineFunctions.getOrPut(function.symbol) { - function.deepCopyWithVariables().also { it.patchDeclarationParents(function.parent) } - } - } - fun getLoweredEnumOrNull(enumClass: IrClass): LoweredEnumAccess? { assert(enumClass.kind == ClassKind.ENUM_CLASS) { "Expected enum class but was: ${enumClass.descriptor}" } return if (!context.llvmModuleSpecification.containsDeclaration(enumClass)) { @@ -148,6 +143,7 @@ internal class Context(config: KonanConfig) : KonanBackendContext(config) { val specialDeclarationsFactory = SpecialDeclarationsFactory(this) val innerClassesSupport by lazy { InnerClassesSupport(mapping, irFactory) } val bridgesSupport by lazy { BridgesSupport(mapping, irBuiltIns, irFactory) } + val inlineFunctionsSupport by lazy { InlineFunctionsSupport(mapping) } open class LazyMember(val initializer: Context.() -> T) { operator fun getValue(thisRef: Context, property: KProperty<*>): T = thisRef.getValue(this) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt index 3a57a65d590..082a534c87d 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLoweringPhases.kt @@ -167,7 +167,7 @@ internal val inlinePhase = makeKonanFileOpPhase( override fun visitFunction(declaration: IrFunction) { if (declaration.isInline) - context.specialDeclarationsFactory.getNonLoweredInlineFunction(declaration) + context.inlineFunctionsSupport.getNonLoweredInlineFunction(declaration) declaration.acceptChildrenVoid(this) } }) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 09d416dec2e..b5249c33956 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -1947,7 +1947,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map