[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
|
override var inVerbosePhase: Boolean = false
|
||||||
|
|
||||||
lateinit var externalPackageFragment: IrPackageFragment
|
var externalPackageFragment = mutableMapOf<FqName, IrPackageFragment>()
|
||||||
lateinit var bodilessBuiltInsPackageFragment: IrPackageFragment
|
lateinit var bodilessBuiltInsPackageFragment: IrPackageFragment
|
||||||
|
|
||||||
val externalNestedClasses = mutableListOf<IrClass>()
|
val externalNestedClasses = mutableListOf<IrClass>()
|
||||||
|
|||||||
+9
-6
@@ -55,12 +55,6 @@ private class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFra
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: IrModuleFragment) {
|
fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: IrModuleFragment) {
|
||||||
val externalPackageFragment = IrExternalPackageFragmentImpl(
|
|
||||||
DescriptorlessExternalPackageFragmentSymbol(),
|
|
||||||
FqName.ROOT
|
|
||||||
)
|
|
||||||
|
|
||||||
context.externalPackageFragment = externalPackageFragment
|
|
||||||
|
|
||||||
val bodilessBuiltInsPackageFragment = IrExternalPackageFragmentImpl(
|
val bodilessBuiltInsPackageFragment = IrExternalPackageFragmentImpl(
|
||||||
DescriptorlessExternalPackageFragmentSymbol(),
|
DescriptorlessExternalPackageFragmentSymbol(),
|
||||||
@@ -86,6 +80,15 @@ fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module:
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun lowerFile(irFile: IrFile): IrFile? {
|
fun lowerFile(irFile: IrFile): IrFile? {
|
||||||
|
val externalPackageFragment by lazy {
|
||||||
|
context.externalPackageFragment.getOrPut(irFile.fqName) {
|
||||||
|
IrExternalPackageFragmentImpl(
|
||||||
|
DescriptorlessExternalPackageFragmentSymbol(),
|
||||||
|
irFile.fqName
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
context.externalNestedClasses += collectExternalClasses(irFile, includeCurrentLevel = false)
|
context.externalNestedClasses += collectExternalClasses(irFile, includeCurrentLevel = false)
|
||||||
|
|
||||||
if (irFile.getJsModule() != null || irFile.getJsQualifier() != null) {
|
if (irFile.getJsModule() != null || irFile.getJsQualifier() != null) {
|
||||||
|
|||||||
+1
-2
@@ -121,8 +121,7 @@ class IrModuleToJsTransformer(
|
|||||||
|
|
||||||
private fun generateModule(module: IrModuleFragment): JsProgram {
|
private fun generateModule(module: IrModuleFragment): JsProgram {
|
||||||
val additionalPackages = with(backendContext) {
|
val additionalPackages = with(backendContext) {
|
||||||
listOf(
|
externalPackageFragment.values + listOf(
|
||||||
externalPackageFragment,
|
|
||||||
bodilessBuiltInsPackageFragment,
|
bodilessBuiltInsPackageFragment,
|
||||||
intrinsics.externalPackageFragment
|
intrinsics.externalPackageFragment
|
||||||
) + packageLevelJsModules
|
) + packageLevelJsModules
|
||||||
|
|||||||
Reference in New Issue
Block a user