[FIR] Fix computing mangled names for top-level functions and properties
^KT-57433 Fixed
This commit is contained in:
committed by
Space Team
parent
1eb0862820
commit
5f59de23c5
+2
-25
@@ -7,13 +7,10 @@ package org.jetbrains.kotlin.fir.backend.jvm
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode
|
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode
|
||||||
import org.jetbrains.kotlin.fir.backend.FirMangleComputer
|
import org.jetbrains.kotlin.fir.backend.FirMangleComputer
|
||||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||||
import org.jetbrains.kotlin.fir.originalForSubstitutionOverride
|
import org.jetbrains.kotlin.fir.originalForSubstitutionOverride
|
||||||
import org.jetbrains.kotlin.fir.render
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
|
|
||||||
@@ -24,7 +21,7 @@ class FirJvmMangleComputer(
|
|||||||
builder: StringBuilder,
|
builder: StringBuilder,
|
||||||
mode: MangleMode,
|
mode: MangleMode,
|
||||||
) : FirMangleComputer(builder, mode) {
|
) : FirMangleComputer(builder, mode) {
|
||||||
override val visitor = JvmVisitor()
|
override val visitor: Visitor = JvmVisitor()
|
||||||
|
|
||||||
override fun FirFunction.platformSpecificSuffix(): String? =
|
override fun FirFunction.platformSpecificSuffix(): String? =
|
||||||
if (this is FirSimpleFunction && name.asString() == "main")
|
if (this is FirSimpleFunction && name.asString() == "main")
|
||||||
@@ -36,26 +33,6 @@ class FirJvmMangleComputer(
|
|||||||
override fun copy(newMode: MangleMode): FirJvmMangleComputer =
|
override fun copy(newMode: MangleMode): FirJvmMangleComputer =
|
||||||
FirJvmMangleComputer(builder, newMode)
|
FirJvmMangleComputer(builder, newMode)
|
||||||
|
|
||||||
// FIXME this implementation causes the mangler to deliver different result than IR mangler. Consider using base method instead
|
|
||||||
override fun FirDeclaration.visitParent() {
|
|
||||||
val (parentPackageFqName, parentClassId) = when (this) {
|
|
||||||
is FirCallableDeclaration -> this.containingClassLookupTag()?.classId?.let { it.packageFqName to it } ?: return
|
|
||||||
is FirClassLikeDeclaration -> this.symbol.classId.let { it.packageFqName to it.outerClassId }
|
|
||||||
else -> return
|
|
||||||
}
|
|
||||||
if (parentClassId != null && !parentClassId.isLocal) {
|
|
||||||
val parentClassLike = this.moduleData.session.symbolProvider.getClassLikeSymbolByClassId(parentClassId)?.fir
|
|
||||||
?: error("Attempt to find parent ($parentClassId) for probably-local declaration!")
|
|
||||||
if (parentClassLike is FirRegularClass || parentClassLike is FirTypeAlias) {
|
|
||||||
parentClassLike.visit()
|
|
||||||
} else {
|
|
||||||
error("Strange class-like declaration: ${parentClassLike.render()}")
|
|
||||||
}
|
|
||||||
} else if (parentClassId == null && !parentPackageFqName.isRoot) {
|
|
||||||
builder.appendName(parentPackageFqName.asString())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME this implementation causes the mangler to deliver different result than IR mangler. Consider using base method instead
|
// FIXME this implementation causes the mangler to deliver different result than IR mangler. Consider using base method instead
|
||||||
override fun getEffectiveParent(typeParameter: ConeTypeParameterLookupTag): FirMemberDeclaration = typeParameter.symbol.fir.run {
|
override fun getEffectiveParent(typeParameter: ConeTypeParameterLookupTag): FirMemberDeclaration = typeParameter.symbol.fir.run {
|
||||||
|
|
||||||
@@ -78,7 +55,7 @@ class FirJvmMangleComputer(
|
|||||||
throw IllegalStateException("Should not be here!")
|
throw IllegalStateException("Should not be here!")
|
||||||
}
|
}
|
||||||
|
|
||||||
protected inner class JvmVisitor : Visitor() {
|
private inner class JvmVisitor : Visitor() {
|
||||||
override fun visitField(field: FirField) {
|
override fun visitField(field: FirField) {
|
||||||
if (field is FirJavaField) {
|
if (field is FirJavaField) {
|
||||||
field.mangleSimpleDeclaration(field.name.asString())
|
field.mangleSimpleDeclaration(field.name.asString())
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
// IGNORE_BACKEND_K1: JS_IR
|
// IGNORE_BACKEND_K1: JS_IR
|
||||||
// IGNORE_BACKEND_K1: JS_IR_ES6
|
// IGNORE_BACKEND_K1: JS_IR_ES6
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
// MODULE: a
|
// MODULE: a
|
||||||
// FILE: a.kt
|
// FILE: a.kt
|
||||||
package a
|
package a
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ package b
|
|||||||
// CHECK JVM_IR:
|
// CHECK JVM_IR:
|
||||||
// Mangled name: b#foo(kotlin.Function0<kotlin.String>){}kotlin.String
|
// Mangled name: b#foo(kotlin.Function0<kotlin.String>){}kotlin.String
|
||||||
// Public signature: b/foo|-5020381652845254261[0]
|
// Public signature: b/foo|-5020381652845254261[0]
|
||||||
|
// CHECK JS_IR NATIVE:
|
||||||
|
// Mangled name: b#foo(kotlin.Function0<kotlin.String>){}
|
||||||
|
// Public signature: b/foo|-2695324588787180624[0]
|
||||||
fun foo(f: Function0<String>): String
|
fun foo(f: Function0<String>): String
|
||||||
|
|
||||||
// MODULE: c
|
// MODULE: c
|
||||||
@@ -21,5 +24,8 @@ fun foo(f: Function0<String>): String
|
|||||||
// CHECK JVM_IR:
|
// CHECK JVM_IR:
|
||||||
// Mangled name: #box(){}kotlin.String
|
// Mangled name: #box(){}kotlin.String
|
||||||
// Public signature: /box|-9347091776561469[0]
|
// Public signature: /box|-9347091776561469[0]
|
||||||
|
// CHECK JS_IR NATIVE:
|
||||||
|
// Mangled name: #box(){}
|
||||||
|
// Public signature: /box|2173511048851971368[0]
|
||||||
fun box(): String
|
fun box(): String
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// SKIP_KT_DUMP
|
// SKIP_KT_DUMP
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
// FILE: box.kt
|
// FILE: box.kt
|
||||||
|
|
||||||
package k
|
package k
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
// SKIP_KLIB_TEST
|
// SKIP_KLIB_TEST
|
||||||
// Related to KT-49507
|
// Related to KT-49507
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
// FILE: A.java
|
// FILE: A.java
|
||||||
public class A {
|
public class A {
|
||||||
protected String x = "1";
|
protected String x = "1";
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
// FILE: test.kt
|
// FILE: test.kt
|
||||||
|
|
||||||
package test
|
package test
|
||||||
|
|||||||
-3
@@ -1,6 +1,3 @@
|
|||||||
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
package test
|
package test
|
||||||
|
|
||||||
inline fun foo(x: () -> Unit) {}
|
inline fun foo(x: () -> Unit) {}
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
||||||
// ^ KT-57433, KT-57429
|
// ^ KT-57429
|
||||||
|
|
||||||
package test
|
package test
|
||||||
|
|
||||||
|
|||||||
-3
@@ -1,8 +1,5 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
package test
|
package test
|
||||||
|
|
||||||
import test.Foo.a
|
import test.Foo.a
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
package test
|
package test
|
||||||
|
|
||||||
import test.Host.foo
|
import test.Host.foo
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
|
|
||||||
// ^ KT-57433
|
|
||||||
|
|
||||||
package test
|
package test
|
||||||
|
|
||||||
class C
|
class C
|
||||||
|
|||||||
Reference in New Issue
Block a user