From d6c937519692de67b838b4b146c80253b3f4eee2 Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Sun, 5 May 2019 18:42:38 +0300 Subject: [PATCH] [JS IR BE] Preserve package fqName when moving external declarations out Create separate package fragment for each fqName of external declaration package --- .../kotlin/ir/backend/js/JsIrBackendContext.kt | 2 +- .../MoveBodilessDeclarationsToSeparatePlace.kt | 15 +++++++++------ .../irToJs/IrModuleToJsTransformer.kt | 3 +-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt index 3fe153320ca..c78b763baa8 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsIrBackendContext.kt @@ -55,7 +55,7 @@ class JsIrBackendContext( override var inVerbosePhase: Boolean = false - lateinit var externalPackageFragment: IrPackageFragment + var externalPackageFragment = mutableMapOf() lateinit var bodilessBuiltInsPackageFragment: IrPackageFragment val externalNestedClasses = mutableListOf() diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt index 26588acd0f9..350dd96188d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/MoveBodilessDeclarationsToSeparatePlace.kt @@ -55,12 +55,6 @@ private class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFra } fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: IrModuleFragment) { - val externalPackageFragment = IrExternalPackageFragmentImpl( - DescriptorlessExternalPackageFragmentSymbol(), - FqName.ROOT - ) - - context.externalPackageFragment = externalPackageFragment val bodilessBuiltInsPackageFragment = IrExternalPackageFragmentImpl( DescriptorlessExternalPackageFragmentSymbol(), @@ -86,6 +80,15 @@ fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: } fun lowerFile(irFile: IrFile): IrFile? { + val externalPackageFragment by lazy { + context.externalPackageFragment.getOrPut(irFile.fqName) { + IrExternalPackageFragmentImpl( + DescriptorlessExternalPackageFragmentSymbol(), + irFile.fqName + ) + } + } + context.externalNestedClasses += collectExternalClasses(irFile, includeCurrentLevel = false) if (irFile.getJsModule() != null || irFile.getJsQualifier() != null) { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt index 0f121dad82f..eb9e72209b5 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt @@ -121,8 +121,7 @@ class IrModuleToJsTransformer( private fun generateModule(module: IrModuleFragment): JsProgram { val additionalPackages = with(backendContext) { - listOf( - externalPackageFragment, + externalPackageFragment.values + listOf( bodilessBuiltInsPackageFragment, intrinsics.externalPackageFragment ) + packageLevelJsModules