diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index 4d806273c58..9b7ac51744c 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -5,10 +5,18 @@ package org.jetbrains.kotlin.backend.common.lower -import org.jetbrains.kotlin.backend.common.* -import org.jetbrains.kotlin.backend.common.descriptors.* -import org.jetbrains.kotlin.backend.common.ir.* -import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase +import org.jetbrains.kotlin.backend.common.CommonBackendContext +import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass +import org.jetbrains.kotlin.backend.common.FileLoweringPass +import org.jetbrains.kotlin.backend.common.FunctionLoweringPass +import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassConstructorDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.synthesizedName +import org.jetbrains.kotlin.backend.common.ir.copyTo +import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom +import org.jetbrains.kotlin.backend.common.ir.ir2string +import org.jetbrains.kotlin.backend.common.ir.passTypeArgumentsFrom import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET @@ -30,12 +38,6 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.name.Name -val jvmDefaultArgumentStubPhase = makeIrFilePhase( - { context -> DefaultArgumentStubGenerator(context, false) }, - name = "DefaultArgumentsStubGenerator", - description = "Generate synthetic stubs for functions with default parameter values" -) - // TODO: fix expect/actual default parameters open class DefaultArgumentStubGenerator( diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index 0012d2a0248..a027ddd1bed 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -30,13 +30,6 @@ import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid -// This pass has to run after LocalDeclarationsLowering, since we don't handle nested functions. -val innerClassesPhase = makeIrFilePhase( - ::InnerClassesLowering, - name = "InnerClasses", - description = "Add 'outer this' fields to inner classes" -) - class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass { private val IrValueSymbol.classForImplicitThis: IrClass? // TODO: is this the correct way to get the class? diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt index 23d2ad4e412..54878b473a8 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LateinitLowering.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.ir.Symbols -import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* @@ -35,12 +34,6 @@ import org.jetbrains.kotlin.ir.util.resolveFakeOverride import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid -val jvmLateinitPhase = makeIrFilePhase( - ::LateinitLowering, - name = "Lateinit", - description = "Insert checks for lateinit field references" -) - class LateinitLowering(val context: CommonBackendContext) : FileLoweringPass { override fun lower(irFile: IrFile) { irFile.transformChildrenVoid(object : IrElementTransformerVoid() { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index 2deeac3b16f..6eac52b0d55 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -6,13 +6,13 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.BackendContext -import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass import org.jetbrains.kotlin.backend.common.descriptors.* import org.jetbrains.kotlin.backend.common.ir.copyTo import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom -import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* @@ -30,23 +30,13 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.patchDeclarationParents import org.jetbrains.kotlin.ir.util.transformDeclarationsFlat -import org.jetbrains.kotlin.ir.visitors.* +import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid +import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid +import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid +import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.name.NameUtils import java.util.* -val jvmLocalDeclarationsPhase = makeIrFilePhase( - { context -> - LocalDeclarationsLowering(context, object : LocalNameProvider { - override fun localName(declaration: IrDeclarationWithName): String = - NameUtils.sanitizeAsJavaIdentifier(super.localName(declaration)) - }, Visibilities.PUBLIC) - }, - name = "JvmLocalDeclarations", - description = "Move local declarations to classes", - prerequisite = setOf(sharedVariablesPhase) -) - interface LocalNameProvider { fun localName(declaration: IrDeclarationWithName): String = declaration.name.asString() 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 7d69af9dd46..33dddb9c8dd 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 @@ -21,10 +21,13 @@ import org.jetbrains.kotlin.backend.common.lower.* import org.jetbrains.kotlin.backend.common.lower.loops.forLoopsPhase import org.jetbrains.kotlin.backend.common.phaser.* import org.jetbrains.kotlin.backend.jvm.lower.* +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithName import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.util.PatchDeclarationParentsVisitor import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.name.NameUtils private fun makePatchParentsPhase(number: Int) = namedIrFilePhase( lower = object : SameTypeCompilerPhase { @@ -50,6 +53,12 @@ private val expectDeclarationsRemovingPhase = makeIrFilePhase( description = "Remove expect declaration from module fragment" ) +private val lateinitPhase = makeIrFilePhase( + ::LateinitLowering, + name = "Lateinit", + description = "Insert checks for lateinit field references" +) + private val propertiesPhase = makeIrFilePhase( { context -> PropertiesLowering(context, JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS) { propertyName -> @@ -61,6 +70,31 @@ private val propertiesPhase = makeIrFilePhase( stickyPostconditions = setOf((PropertiesLowering)::checkNoProperties) ) +private val defaultArgumentStubPhase = makeIrFilePhase( + { context -> DefaultArgumentStubGenerator(context, false) }, + name = "DefaultArgumentsStubGenerator", + description = "Generate synthetic stubs for functions with default parameter values" +) + +private val localDeclarationsPhase = makeIrFilePhase( + { context -> + LocalDeclarationsLowering(context, object : LocalNameProvider { + override fun localName(declaration: IrDeclarationWithName): String = + NameUtils.sanitizeAsJavaIdentifier(super.localName(declaration)) + }, Visibilities.PUBLIC) + }, + name = "JvmLocalDeclarations", + description = "Move local declarations to classes", + prerequisite = setOf(sharedVariablesPhase) +) + +private val innerClassesPhase = makeIrFilePhase( + ::InnerClassesLowering, + name = "InnerClasses", + description = "Add 'outer this' fields to inner classes", + prerequisite = setOf(localDeclarationsPhase) +) + val jvmPhases = namedIrFilePhase( name = "IrLowering", description = "IR lowering", @@ -69,7 +103,7 @@ val jvmPhases = namedIrFilePhase( kCallableNamePropertyPhase then arrayConstructorPhase then - jvmLateinitPhase then + lateinitPhase then moveCompanionObjectFieldsPhase then propertyReferencePhase then @@ -79,7 +113,7 @@ val jvmPhases = namedIrFilePhase( renameFieldsPhase then annotationPhase then - jvmDefaultArgumentStubPhase then + defaultArgumentStubPhase then interfacePhase then interfaceDelegationPhase then @@ -90,7 +124,7 @@ val jvmPhases = namedIrFilePhase( enumWhenPhase then singletonReferencesPhase then - jvmLocalDeclarationsPhase then + localDeclarationsPhase then singleAbstractMethodPhase then callableReferencePhase then functionNVarargInvokePhase then