From b8f9b07a5af60be5336dd9fbfdfe676f22981bcd Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Thu, 1 Dec 2022 12:41:25 +0200 Subject: [PATCH] [K/N] Turn NativeGenerationState into PhaseContext It allows to use NativeGenerationState as a PhaseContext in lowering and codegen phases. --- .../kotlin/backend/konan/NativeGenerationState.kt | 11 +++++++---- .../jetbrains/kotlin/backend/konan/ToplevelPhases.kt | 8 ++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt index 9af65bea952..a41fd3b014f 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.backend.konan import llvm.* +import org.jetbrains.kotlin.backend.konan.driver.BasicPhaseContext import org.jetbrains.kotlin.backend.konan.llvm.* import org.jetbrains.kotlin.backend.konan.llvm.DebugInfo import org.jetbrains.kotlin.backend.konan.llvm.Llvm @@ -42,9 +43,11 @@ internal class FileLowerState { "$prefix${cStubCount++}" } -internal class NativeGenerationState(val context: Context, val cacheDeserializationStrategy: CacheDeserializationStrategy?) { - private val config = context.config - +internal class NativeGenerationState( + config: KonanConfig, + val context: Context, + val cacheDeserializationStrategy: CacheDeserializationStrategy? +) : BasicPhaseContext(config) { private val outputPath = config.cacheSupport.tryGetImplicitOutput(cacheDeserializationStrategy) ?: config.outputPath val outputFiles = OutputFiles(outputPath, config.target, config.produce) val tempFiles = run { @@ -118,7 +121,7 @@ internal class NativeGenerationState(val context: Context, val cacheDeserializat } private var isDisposed = false - fun dispose() { + override fun dispose() { if (isDisposed) return if (hasDebugInfo()) { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt index 5cf485a17f6..83caeee2346 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ToplevelPhases.kt @@ -361,7 +361,11 @@ internal val umbrellaCompilation = SameTypeNamedCompilerPhase( for (file in files) { if (file.isFunctionInterfaceFile) continue - context.generationState = NativeGenerationState(context, CacheDeserializationStrategy.SingleFile(file.path, file.fqName.asString())) + context.generationState = NativeGenerationState( + context.config, + context, + CacheDeserializationStrategy.SingleFile(file.path, file.fqName.asString()) + ) module.files += file if (context.generationState.shouldDefineFunctionClasses) @@ -449,7 +453,7 @@ internal val createGenerationStatePhase = namedUnitPhase( description = "Create generation state", lower = object : CompilerPhase { override fun invoke(phaseConfig: PhaseConfigurationService, phaserState: PhaserState, context: Context, input: Unit) { - context.generationState = NativeGenerationState(context, context.config.libraryToCache?.strategy) + context.generationState = NativeGenerationState(context.config, context, context.config.libraryToCache?.strategy) } } )