From 136d86e55298e6fd1c25b39f650b8bd5108b1955 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Thu, 20 Aug 2020 17:05:11 +0300 Subject: [PATCH] [JS IR] Fix cross-module import/export in case per-module splitting --- .../js/export/ExportModelToJsStatements.kt | 17 ++++++++--------- .../irToJs/IrModuleToJsTransformer.kt | 3 ++- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelToJsStatements.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelToJsStatements.kt index c3e19e6b9b3..d346b894eef 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelToJsStatements.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelToJsStatements.kt @@ -8,17 +8,16 @@ package org.jetbrains.kotlin.ir.backend.js.export import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtils import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.defineProperty import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.jsAssignment -import org.jetbrains.kotlin.ir.backend.js.utils.NameTable -import org.jetbrains.kotlin.ir.backend.js.utils.NameTables +import org.jetbrains.kotlin.ir.backend.js.utils.IrNamer import org.jetbrains.kotlin.js.backend.ast.* class ExportModelToJsStatements( private val internalModuleName: JsName, - private val nameTables: NameTables + private val namer: IrNamer, + private val declareNewNamespace: (String) -> String ) { private val namespaceToRefMap = mutableMapOf() - private val globalNames = NameTable(nameTables.globalNames) fun generateModuleExport(module: ExportedModule): List { return module.declarations.flatMap { generateDeclarationExport(it, JsNameRef(internalModuleName)) } @@ -34,7 +33,7 @@ class ExportModelToJsStatements( for (element in elements) { val newNamespace = "$currentNamespace$$element" val newNameSpaceRef = namespaceToRefMap.getOrPut(newNamespace) { - val varName = globalNames.declareFreshName(newNamespace, newNamespace) + val varName = declareNewNamespace(newNamespace) val varRef = JsNameRef(varName) val namespaceRef = JsNameRef(element, currentRef) statements += JsVars( @@ -60,7 +59,7 @@ class ExportModelToJsStatements( listOf( jsAssignment( JsNameRef(declaration.name, namespace), - JsNameRef(nameTables.getNameForStaticDeclaration(declaration.ir)) + JsNameRef(namer.getNameForStaticDeclaration(declaration.ir)) ).makeStmt() ) } @@ -68,8 +67,8 @@ class ExportModelToJsStatements( is ExportedConstructor -> emptyList() is ExportedProperty -> { - val getter = declaration.irGetter?.let { JsNameRef(nameTables.getNameForStaticDeclaration(it)) } - val setter = declaration.irSetter?.let { JsNameRef(nameTables.getNameForStaticDeclaration(it)) } + val getter = declaration.irGetter?.let { JsNameRef(namer.getNameForStaticDeclaration(it)) } + val setter = declaration.irSetter?.let { JsNameRef(namer.getNameForStaticDeclaration(it)) } listOf(defineProperty(namespace, declaration.name, getter, setter).makeStmt()) } @@ -81,7 +80,7 @@ class ExportModelToJsStatements( val klassExport = jsAssignment( newNameSpace, JsNameRef( - nameTables.getNameForStaticDeclaration( + namer.getNameForStaticDeclaration( declaration.ir ) ) 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 198aa6182b8..d5db898517a 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 @@ -149,7 +149,8 @@ class IrModuleToJsTransformer( val moduleBody = generateModuleBody(modules, rootContext) val internalModuleName = JsName("_") - val exportStatements = ExportModelToJsStatements(internalModuleName, namer).generateModuleExport(exportedModule) + val globalNames = NameTable(namer.globalNames) + val exportStatements = ExportModelToJsStatements(internalModuleName, nameGenerator, { globalNames.declareFreshName(it, it)}).generateModuleExport(exportedModule) val callToMain = generateCallToMain(modules, rootContext)