[JS IR] Don't use JVM-specific mangler in JS IR backend

^KT-54638 Fixed
This commit is contained in:
Sergej Jaskiewicz
2023-03-31 14:30:12 +02:00
committed by Space Team
parent 185097f82e
commit 78d19e143c
5 changed files with 41 additions and 6 deletions
@@ -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,
@@ -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,
@@ -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"))
@@ -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<FirDeclaration> {
return JsFirExportChecker()
}
override fun getMangleComputer(mode: MangleMode, compatibleMode: Boolean): KotlinMangleComputer<FirDeclaration> {
return FirMangleComputer(StringBuilder(256), mode)
}
}
@@ -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()) {