[JS IR] export external declarations

This commit is contained in:
Anton Bannykh
2021-10-20 18:32:59 +03:00
committed by TeamCityServer
parent ee8351b9c9
commit 03b9caa439
2 changed files with 12 additions and 6 deletions
@@ -47,7 +47,7 @@ class IrModuleToJsTransformerTmp(
val exportData = modules.associate { module -> val exportData = modules.associate { module ->
module to module.files.associate { file -> module to module.files.associate { file ->
file to exportModelGenerator.generateExport(file) file to exportModelGenerator.generateExportWithExternals(file)
} }
} }
@@ -72,7 +72,7 @@ class IrModuleToJsTransformerTmp(
val exportModelGenerator = ExportModelGenerator(backendContext, generateNamespacesForPackages = true) val exportModelGenerator = ExportModelGenerator(backendContext, generateNamespacesForPackages = true)
val exportData = files.associate { file -> val exportData = files.associate { file ->
file to exportModelGenerator.generateExport(file) file to exportModelGenerator.generateExportWithExternals(file)
} }
files.forEach { StaticMembersLowering(backendContext).lower(it) } files.forEach { StaticMembersLowering(backendContext).lower(it) }
@@ -92,6 +92,12 @@ class IrModuleToJsTransformerTmp(
return result return result
} }
private fun ExportModelGenerator.generateExportWithExternals(irFile: IrFile): List<ExportedDeclaration> {
val exports = generateExport(irFile)
val additionalExports = backendContext.externalPackageFragment[irFile.symbol]?.let { generateExport(it) } ?: emptyList()
return additionalExports + exports
}
private fun generateProgramFragments( private fun generateProgramFragments(
modules: Iterable<IrModuleFragment>, modules: Iterable<IrModuleFragment>,
exportData: Map<IrModuleFragment, Map<IrFile, List<ExportedDeclaration>>>, exportData: Map<IrModuleFragment, Map<IrFile, List<ExportedDeclaration>>>,
@@ -6,10 +6,6 @@ declare namespace JS_TESTS {
interface ExportedInternalInterface { interface ExportedInternalInterface {
} }
} }
namespace foo {
interface FileLevelExportedExternalInterface {
}
}
namespace foo { namespace foo {
const exportedVal: number; const exportedVal: number;
function exportedFun(): number; function exportedFun(): number;
@@ -18,6 +14,10 @@ declare namespace JS_TESTS {
readonly value: number; readonly value: number;
} }
} }
namespace foo {
interface FileLevelExportedExternalInterface {
}
}
namespace foo { namespace foo {
const fileLevelExportedVal: number; const fileLevelExportedVal: number;
function fileLevelExportedFun(): number; function fileLevelExportedFun(): number;