[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:
Svyatoslav Kuzmich
2019-05-05 18:42:38 +03:00
parent 2741ecaaad
commit d6c9375196
3 changed files with 11 additions and 9 deletions
@@ -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>()
@@ -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) {
@@ -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