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