From d9023bdf70afa0b3234863b93d26115e0ff32311 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Mon, 9 Jan 2017 14:57:31 +0700 Subject: [PATCH] backend: move some JVM lowering to common --- .../org/jetbrains/kotlin/backend/common/Lower.kt | 16 ++++++++++++++++ .../common}/lower/LocalFunctionsLowering.kt | 13 +++++++------ .../common}/lower/SharedVariablesLowering.kt | 6 +++--- .../org/jetbrains/kotlin/backend/jvm/JvmLower.kt | 2 ++ 4 files changed, 28 insertions(+), 9 deletions(-) rename compiler/ir/{backend.jvm/src/org/jetbrains/kotlin/backend/jvm => backend.common/src/org/jetbrains/kotlin/backend/common}/lower/LocalFunctionsLowering.kt (97%) rename compiler/ir/{backend.jvm/src/org/jetbrains/kotlin/backend/jvm => backend.common/src/org/jetbrains/kotlin/backend/common}/lower/SharedVariablesLowering.kt (96%) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/Lower.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/Lower.kt index b2ed4067fa7..223791c5a27 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/Lower.kt +++ b/compiler/ir/backend.common/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/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/LocalFunctionsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalFunctionsLowering.kt similarity index 97% rename from compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/LocalFunctionsLowering.kt rename to compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalFunctionsLowering.kt index b8e72fcbe69..b6b504774e4 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/LocalFunctionsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalFunctionsLowering.kt @@ -14,12 +14,12 @@ * limitations under the License. */ -package org.jetbrains.kotlin.backend.jvm.lower +package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.AbstractClosureAnnotator -import org.jetbrains.kotlin.backend.common.ClassLoweringPass +import org.jetbrains.kotlin.backend.common.BackendContext import org.jetbrains.kotlin.backend.common.Closure -import org.jetbrains.kotlin.backend.jvm.JvmBackendContext +import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl @@ -27,6 +27,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 +43,9 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf import org.jetbrains.kotlin.types.KotlinType import java.util.* -class LocalFunctionsLowering(val context: JvmBackendContext): 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 diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SharedVariablesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt similarity index 96% rename from compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SharedVariablesLowering.kt rename to compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt index fcffbd2ed73..c3996d208c7 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SharedVariablesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt @@ -14,10 +14,10 @@ * limitations under the License. */ -package org.jetbrains.kotlin.backend.jvm.lower +package org.jetbrains.kotlin.backend.common.lower +import org.jetbrains.kotlin.backend.common.BackendContext import org.jetbrains.kotlin.backend.common.FunctionLoweringPass -import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ValueDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.ir.expressions.IrValueAccessExpression import org.jetbrains.kotlin.ir.visitors.* import java.util.* -class SharedVariablesLowering(val context: JvmBackendContext) : FunctionLoweringPass { +class SharedVariablesLowering(val context: BackendContext) : FunctionLoweringPass { override fun lower(irFunction: IrFunction) { SharedVariablesTransformer(irFunction).lowerSharedVariables() } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt index c22a90183e1..b398fecae99 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.backend.jvm +import org.jetbrains.kotlin.backend.common.lower.LocalFunctionsLowering +import org.jetbrains.kotlin.backend.common.lower.SharedVariablesLowering import org.jetbrains.kotlin.backend.common.runOnFilePostfix import org.jetbrains.kotlin.backend.jvm.lower.* import org.jetbrains.kotlin.ir.declarations.IrFile