[K/JS] Use globalThis isntead of this for UMD modules ^KT-45604 Fixed
This commit is contained in:
@@ -17,15 +17,17 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.js.config.RuntimeDiagnostic
|
||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
fun eliminateDeadDeclarations(
|
||||
modules: Iterable<IrModuleFragment>,
|
||||
context: JsIrBackendContext,
|
||||
moduleKind: ModuleKind,
|
||||
removeUnusedAssociatedObjects: Boolean = true,
|
||||
dceDumpNameCache: DceDumpNameCache,
|
||||
) {
|
||||
val allRoots = buildRoots(modules, context)
|
||||
val allRoots = buildRoots(modules, context, moduleKind)
|
||||
|
||||
val printReachabilityInfo =
|
||||
context.configuration.getBoolean(JSConfigurationKeys.PRINT_REACHABILITY_INFO) ||
|
||||
@@ -91,7 +93,11 @@ private fun IrDeclaration.addRootsTo(
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildRoots(modules: Iterable<IrModuleFragment>, context: JsIrBackendContext): List<IrDeclaration> = buildList {
|
||||
private fun buildRoots(
|
||||
modules: Iterable<IrModuleFragment>,
|
||||
context: JsIrBackendContext,
|
||||
moduleKind: ModuleKind
|
||||
): List<IrDeclaration> = buildList {
|
||||
val declarationsCollector = object : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement): Unit = element.acceptChildrenVoid(this)
|
||||
override fun visitBody(body: IrBody): Unit = Unit // Skip
|
||||
@@ -119,6 +125,11 @@ private fun buildRoots(modules: Iterable<IrModuleFragment>, context: JsIrBackend
|
||||
?.let { add(it) }
|
||||
|
||||
addIfNotNull(context.intrinsics.void.owner.backingField)
|
||||
|
||||
if (moduleKind == ModuleKind.UMD) {
|
||||
add(context.intrinsics.globalThis.owner)
|
||||
}
|
||||
|
||||
addAll(context.testFunsPerFile.values)
|
||||
addAll(context.additionalExportedDeclarations)
|
||||
}
|
||||
|
||||
@@ -19,14 +19,16 @@ import org.jetbrains.kotlin.js.backend.ast.JsFunction
|
||||
import org.jetbrains.kotlin.js.backend.ast.RecursiveJsVisitor
|
||||
import org.jetbrains.kotlin.js.inline.clean.ClassPostProcessor
|
||||
import org.jetbrains.kotlin.js.inline.clean.FunctionPostProcessor
|
||||
import org.jetbrains.kotlin.serialization.js.ModuleKind
|
||||
|
||||
fun optimizeProgramByIr(
|
||||
modules: Iterable<IrModuleFragment>,
|
||||
context: JsIrBackendContext,
|
||||
moduleKind: ModuleKind,
|
||||
removeUnusedAssociatedObjects: Boolean
|
||||
) {
|
||||
val dceDumpNameCache = DceDumpNameCache() // in JS mode only DCE Graph could be dumped
|
||||
eliminateDeadDeclarations(modules, context, removeUnusedAssociatedObjects, dceDumpNameCache)
|
||||
eliminateDeadDeclarations(modules, context, moduleKind, removeUnusedAssociatedObjects, dceDumpNameCache)
|
||||
|
||||
val phaseConfig = PhaseConfig(jsOptimizationPhases)
|
||||
val phaserState = PhaserState<IrModuleFragment>()
|
||||
|
||||
+2
-2
@@ -210,7 +210,7 @@ class IrModuleToJsTransformer(
|
||||
}
|
||||
|
||||
if (modes.any { it.production }) {
|
||||
optimizeProgramByIr(modules, backendContext, removeUnusedAssociatedObjects)
|
||||
optimizeProgramByIr(modules, backendContext, moduleKind, removeUnusedAssociatedObjects)
|
||||
}
|
||||
|
||||
modes.filter { it.production }.forEach {
|
||||
@@ -225,7 +225,7 @@ class IrModuleToJsTransformer(
|
||||
doStaticMembersLowering(modules)
|
||||
|
||||
if (mode.production) {
|
||||
optimizeProgramByIr(modules, backendContext, removeUnusedAssociatedObjects)
|
||||
optimizeProgramByIr(modules, backendContext, moduleKind, removeUnusedAssociatedObjects)
|
||||
}
|
||||
|
||||
return makeJsCodeGeneratorFromIr(exportData, mode)
|
||||
|
||||
+1
-1
@@ -96,7 +96,7 @@ object ModuleWrapperTranslation {
|
||||
val selector = JsAstUtils.newJsIf(amdTest, amdBody, JsAstUtils.newJsIf(commonJsTest, commonJsBody, plainBlock))
|
||||
adapterBody.statements += selector
|
||||
|
||||
return listOf(JsInvocation(adapter, JsThisRef(), function).makeStmt())
|
||||
return listOf(JsInvocation(adapter, JsName("globalThis", false).makeRef(), function).makeStmt())
|
||||
}
|
||||
|
||||
private fun wrapAmd(
|
||||
|
||||
Reference in New Issue
Block a user