From a37cabbd517af18b9e7e74d90bc71eab22212645 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Thu, 8 Dec 2016 11:53:35 +0700 Subject: [PATCH] backend/common: adapt common lowering to use in konan --- .../org/jetbrains/kotlin/backend/common/Lower.kt | 16 ++++++++++++++++ .../common/lower/LocalFunctionsLowering.kt | 12 +++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/Lower.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/Lower.kt index b4612300668..b3a9f7e9c46 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/Lower.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/Lower.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.backend.common import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrDeclarationContainer import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.expressions.IrBody @@ -33,6 +34,10 @@ interface ClassLoweringPass { fun lower(irClass: IrClass) } +interface DeclarationContainerLoweringPass { + fun lower(irDeclarationContainer: IrDeclarationContainer) +} + interface FunctionLoweringPass { fun lower(irFunction: IrFunction) } @@ -54,6 +59,17 @@ fun ClassLoweringPass.runOnFilePostfix(irFile: IrFile) { }) } +fun DeclarationContainerLoweringPass.asClassLoweringPass() = object : ClassLoweringPass { + override fun lower(irClass: IrClass) { + this@asClassLoweringPass.lower(irClass) + } +} + +fun DeclarationContainerLoweringPass.runOnFilePostfix(irFile: IrFile) { + this.asClassLoweringPass().runOnFilePostfix(irFile) + this.lower(irFile) +} + fun BodyLoweringPass.runOnFilePostfix(irFile: IrFile) { irFile.acceptVoid(object : IrElementVisitorVoid { override fun visitElement(element: IrElement) { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalFunctionsLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalFunctionsLowering.kt index 902becec16c..3d934a0a796 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalFunctionsLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/lower/LocalFunctionsLowering.kt @@ -16,10 +16,7 @@ package org.jetbrains.kotlin.backend.common.lower -import org.jetbrains.kotlin.backend.common.AbstractClosureAnnotator -import org.jetbrains.kotlin.backend.common.BackendContext -import org.jetbrains.kotlin.backend.common.ClassLoweringPass -import org.jetbrains.kotlin.backend.common.Closure +import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl @@ -27,6 +24,7 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrDeclarationContainer import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl import org.jetbrains.kotlin.ir.expressions.* @@ -42,9 +40,9 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf import org.jetbrains.kotlin.types.KotlinType import java.util.* -class LocalFunctionsLowering(val context: BackendContext): ClassLoweringPass { - override fun lower(irClass: IrClass) { - irClass.declarations.transformFlat { memberDeclaration -> +class LocalFunctionsLowering(val context: BackendContext): DeclarationContainerLoweringPass { + override fun lower(irDeclarationContainer: IrDeclarationContainer) { + irDeclarationContainer.declarations.transformFlat { memberDeclaration -> if (memberDeclaration is IrFunction) LocalFunctionsTransformer(memberDeclaration).lowerLocalFunctions() else