IC mangling: Replace compiler hack with configuration flag

This commit is contained in:
Ilmir Usmanov
2020-11-14 00:47:17 +01:00
parent bc1b6fef1f
commit 2cd9016016
27 changed files with 108 additions and 30 deletions
@@ -61,8 +61,6 @@ object InlineClassAbi {
return irClass.primaryConstructor!!.valueParameters[0].type
}
private fun IrFunction.isFunctionFromStdlib(): Boolean = fqNameForIrSerialization.startsWith(Name.identifier("kotlin"))
/**
* Returns a mangled name for a function taking inline class arguments
* to avoid clashes between overloaded methods.
@@ -99,7 +97,7 @@ object InlineClassAbi {
alwaysMangleReturnType: Boolean = false
): String? {
val signatureForMangling = collectFunctionSignatureForManglingSuffix(
useOldManglingRules = useOldMangleRules || irFunction.isFunctionFromStdlib(),
useOldManglingRules = useOldMangleRules,
requiresFunctionNameManglingForParameterTypes = irFunction.fullValueParameterList.any { it.type.requiresMangling },
fqNamesForMangling = irFunction.fullValueParameterList.map {
it.type.asInfoForMangling()
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.backend.jvm.codegen.classFileContainsMethod
import org.jetbrains.kotlin.backend.jvm.ir.isStaticInlineClassReplacement
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi.mangledNameFor
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
@@ -221,8 +222,13 @@ class MemoizedInlineClassReplacements(
if (noFakeOverride) {
isFakeOverride = false
}
name = mangledNameFor(function, mangleReturnTypes, false)
if (name.asString().contains("-") && classFileContainsMethod(function, context, name.asString()) == false) {
val useOldManglingScheme = context.state.configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME)
name = mangledNameFor(function, mangleReturnTypes, useOldManglingScheme)
if (
!useOldManglingScheme &&
name.asString().contains("-") &&
classFileContainsMethod(function, context, name.asString()) == false
) {
name = mangledNameFor(function, mangleReturnTypes, true)
}
returnType = function.returnType