diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt index 71d12016772..7a5491045ef 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLower.kt @@ -21,21 +21,32 @@ import org.jetbrains.kotlin.backend.common.lower.* import org.jetbrains.kotlin.backend.common.validateIrFile import org.jetbrains.kotlin.backend.konan.lower.* import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrModuleFragment internal class KonanLower(val context: Context) { fun lower() { + // Phases to run against whole module. + lowerModule(context.irModule!!) + + // Phases to run against a file. context.irModule!!.files.forEach { - lower(it) + lowerFile(it) } } - fun lower(irFile: IrFile) { + fun lowerModule(irModule: IrModuleFragment) { val phaser = PhaseManager(context) + // Inlining must be run before other phases. phaser.phase(KonanPhase.LOWER_INLINE) { - FunctionInlining(context).inline(irFile) + FunctionInlining(context).inline(irModule) } + } + + fun lowerFile(irFile: IrFile) { + val phaser = PhaseManager(context) + phaser.phase(KonanPhase.LOWER_STRING_CONCAT) { StringConcatenationLowering(context).lower(irFile) } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt index e9a7cf578a9..65ea032faea 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt @@ -24,10 +24,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.Scope -import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrProperty -import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.util.DeepCopyIrTree @@ -48,7 +45,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid( //-------------------------------------------------------------------------// private val deserializer = DeserializerDriver(context) - fun inline(irFile: IrFile) = irFile.accept(this, null) + fun inline(irModule: IrModuleFragment) = irModule.accept(this, null) //-------------------------------------------------------------------------//