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