From 78d19e143c5ef9ab6d49ee55ef2fa5a96b452fd9 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 31 Mar 2023 14:30:12 +0200 Subject: [PATCH] [JS IR] Don't use JVM-specific mangler in JS IR backend ^KT-54638 Fixed --- .../kotlin/cli/js/klib/compilerPipeline.kt | 9 ++++-- .../fir/backend/jvm/FirJvmMangleComputer.kt | 2 +- compiler/ir/serialization.js/build.gradle.kts | 1 + .../fir/backend/js/FirJsKotlinMangler.kt | 31 +++++++++++++++++++ .../frontend/fir/Fir2IrJsResultsConverter.kt | 4 +-- 5 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 compiler/ir/serialization.js/src/org/jetbrains/kotlin/fir/backend/js/FirJsKotlinMangler.kt diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt index 2566c3f26bd..67104a50c3d 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/klib/compilerPipeline.kt @@ -24,8 +24,11 @@ import org.jetbrains.kotlin.diagnostics.impl.PendingDiagnosticsCollectorWithSupp import org.jetbrains.kotlin.fir.BinaryModuleData import org.jetbrains.kotlin.fir.DependencyListForCliModule import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.backend.* -import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler +import org.jetbrains.kotlin.fir.backend.ConstValueProviderImpl +import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions +import org.jetbrains.kotlin.fir.backend.Fir2IrVisibilityConverter +import org.jetbrains.kotlin.fir.backend.extractFirDeclarations +import org.jetbrains.kotlin.fir.backend.js.FirJsKotlinMangler import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar @@ -130,7 +133,7 @@ fun transformFirToIr( linkViaSignatures = false, signatureComposerCreator = null, irMangler = JsManglerIr, - firManglerCreator = { FirJvmKotlinMangler() }, + firManglerCreator = ::FirJsKotlinMangler, visibilityConverter = Fir2IrVisibilityConverter.Default, kotlinBuiltIns = builtInsModule ?: DefaultBuiltIns.Instance, diagnosticReporter = diagnosticsReporter, diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt index 2d3d333bcf5..d8af581ad99 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.types.coneType /** - * A mangle computer that generates a mangled name for a Kotlin declaration represented by [FirDeclaration]. + * JVM backend-specific mangle computer that generates a mangled name for a Kotlin declaration represented by [FirDeclaration]. */ class FirJvmMangleComputer( builder: StringBuilder, diff --git a/compiler/ir/serialization.js/build.gradle.kts b/compiler/ir/serialization.js/build.gradle.kts index 0b2b64b769d..801cec55dbd 100644 --- a/compiler/ir/serialization.js/build.gradle.kts +++ b/compiler/ir/serialization.js/build.gradle.kts @@ -5,6 +5,7 @@ plugins { dependencies { api(project(":compiler:ir.psi2ir")) + api(project(":compiler:fir:fir2ir")) api(project(":compiler:ir.serialization.common")) api(project(":js:js.frontend")) diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/fir/backend/js/FirJsKotlinMangler.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/fir/backend/js/FirJsKotlinMangler.kt new file mode 100644 index 00000000000..d36c999450f --- /dev/null +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/fir/backend/js/FirJsKotlinMangler.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.backend.js + +import org.jetbrains.kotlin.backend.common.serialization.mangle.KotlinExportChecker +import org.jetbrains.kotlin.backend.common.serialization.mangle.KotlinMangleComputer +import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode +import org.jetbrains.kotlin.fir.NoMutableState +import org.jetbrains.kotlin.fir.backend.FirBasedKotlinMangler +import org.jetbrains.kotlin.fir.backend.FirExportCheckerVisitor +import org.jetbrains.kotlin.fir.backend.FirMangleComputer +import org.jetbrains.kotlin.fir.declarations.FirDeclaration + +@NoMutableState +class FirJsKotlinMangler : FirBasedKotlinMangler() { + + private class JsFirExportChecker : FirExportCheckerVisitor() { + override fun FirDeclaration.isPlatformSpecificExported() = false + } + + override fun getExportChecker(compatibleMode: Boolean): KotlinExportChecker { + return JsFirExportChecker() + } + + override fun getMangleComputer(mode: MangleMode, compatibleMode: Boolean): KotlinMangleComputer { + return FirMangleComputer(StringBuilder(256), mode) + } +} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt index 856cbd4efb5..02c7aebef50 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrJsResultsConverter.kt @@ -18,8 +18,8 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory import org.jetbrains.kotlin.fir.AbstractFirAnalyzerFacade import org.jetbrains.kotlin.fir.FirAnalyzerFacade import org.jetbrains.kotlin.fir.backend.* +import org.jetbrains.kotlin.fir.backend.js.FirJsKotlinMangler import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider -import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor @@ -68,7 +68,7 @@ class Fir2IrJsResultsConverter( val commonMemberStorage = Fir2IrCommonMemberStorage( generateSignatures = false, signatureComposerCreator = null, - manglerCreator = { FirJvmKotlinMangler() } // TODO: replace with potentially simpler JS version + manglerCreator = ::FirJsKotlinMangler ) for ((index, part) in inputArtifact.partsForDependsOnModules.withIndex()) {