[JS IR BE] Preserve package fqName when moving external declarations out
Create separate package fragment for each fqName of external declaration package
This commit is contained in:
@@ -55,7 +55,7 @@ class JsIrBackendContext(
|
||||
|
||||
override var inVerbosePhase: Boolean = false
|
||||
|
||||
lateinit var externalPackageFragment: IrPackageFragment
|
||||
var externalPackageFragment = mutableMapOf<FqName, IrPackageFragment>()
|
||||
lateinit var bodilessBuiltInsPackageFragment: IrPackageFragment
|
||||
|
||||
val externalNestedClasses = mutableListOf<IrClass>()
|
||||
|
||||
+9
-6
@@ -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) {
|
||||
|
||||
+1
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user