From 87952d63a387b07278a17ddb483d1ebc4215eeca Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Wed, 24 Nov 2021 15:57:02 +0100 Subject: [PATCH] Rollback script related LDL changes... to reimplement them properly in the script lowering --- .../common/lower/LocalDeclarationsLowering.kt | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) 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 9adde42a6e0..14eec505cfb 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 @@ -5,13 +5,12 @@ package org.jetbrains.kotlin.backend.common.lower +import org.jetbrains.kotlin.backend.common.BodyLoweringPass import org.jetbrains.kotlin.backend.common.CommonBackendContext -import org.jetbrains.kotlin.backend.common.BodyAndScriptBodyLoweringPass import org.jetbrains.kotlin.backend.common.descriptors.synthesizedString import org.jetbrains.kotlin.backend.common.ir.* import org.jetbrains.kotlin.backend.common.lower.inline.isInlineParameter import org.jetbrains.kotlin.backend.common.runOnFilePostfix -import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibility @@ -83,7 +82,7 @@ class LocalDeclarationsLowering( val suggestUniqueNames: Boolean = true, // When `true` appends a `-#index` suffix to lifted declaration names val forceFieldsForInlineCaptures: Boolean = false // See `LocalClassContext` ) : - BodyAndScriptBodyLoweringPass { + BodyLoweringPass { override fun lower(irFile: IrFile) { runOnFilePostfix(irFile, allowDeclarationModification = true) @@ -96,16 +95,11 @@ class LocalDeclarationsLowering( IrDeclarationOriginImpl("FIELD_FOR_CROSSINLINE_CAPTURED_VALUE", isSynthetic = true) override fun lower(irBody: IrBody, container: IrDeclaration) { - LocalDeclarationsTransformer(irBody, container, null, false).lowerLocalDeclarations() + LocalDeclarationsTransformer(irBody, container, null).lowerLocalDeclarations() } - override fun lowerScriptBody(irDeclarationContainer: IrDeclarationContainer, container: IrDeclaration) { - LocalDeclarationsTransformer(irDeclarationContainer, container, null, true).lowerLocalDeclarations() - } - - fun lower(irElement: IrElement, container: IrDeclaration, classesToLower: Set) { - LocalDeclarationsTransformer(irElement, container, classesToLower, false).lowerLocalDeclarations() + LocalDeclarationsTransformer(irElement, container, classesToLower).lowerLocalDeclarations() } internal class ScopeWithCounter(val irElement: IrElement) { @@ -235,7 +229,7 @@ class LocalDeclarationsLowering( } private inner class LocalDeclarationsTransformer( - val irElement: IrElement, val container: IrDeclaration, val classesToLower: Set?, val isScriptMode: Boolean + val irElement: IrElement, val container: IrDeclaration, val classesToLower: Set? ) { val localFunctions: MutableMap = LinkedHashMap() val localClasses: MutableMap = LinkedHashMap() @@ -496,8 +490,6 @@ class LocalDeclarationsLowering( irClass.transformChildrenVoid(FunctionBodiesRewriter(localClassContext)) - if (isScriptMode && constructors.isEmpty()) return - // NOTE: if running before InitializersLowering, we can instead look for constructors that have // IrInstanceInitializerCall. However, Native runs these two lowerings in opposite order. val constructorsCallingSuper = constructors @@ -952,11 +944,7 @@ class LocalDeclarationsLowering( override fun visitConstructor(declaration: IrConstructor, data: Data) { super.visitConstructor(declaration, data) - if (!isScriptMode && !declaration.constructedClass.isLocalNotInner()) return - // Inner classes in scripts are handled properly in the InnerClassesLowering - if (isScriptMode && declaration.constructedClass.isInner) return - // LDL doesn't work on the enums because local enums are not allowed, so skipping them in scripts too - if (isScriptMode && declaration.constructedClass.kind == ClassKind.ENUM_CLASS) return + if (!declaration.constructedClass.isLocalNotInner()) return localClassConstructors[declaration] = LocalClassConstructorContext(declaration, data.inInlineFunctionScope) } @@ -965,11 +953,7 @@ class LocalDeclarationsLowering( if (classesToLower?.contains(declaration) == false) return super.visitClass(declaration, data.withCurrentClass(declaration)) - if (!isScriptMode && !declaration.isLocalNotInner()) return - // Inner classes in scripts are handled properly in the InnerClassesLowering - if (isScriptMode && declaration.isInner) return - // LDL doesn't work on the enums because local enums are not allowed, so skipping them in scripts too - if (isScriptMode && declaration.kind == ClassKind.ENUM_CLASS) return + if (!declaration.isLocalNotInner()) return // If there are many non-delegating constructors, each copy of the initializer requires different remapping: // class C {