Don't mangle function names with 'kotlin.SuccessOrFailure'
This commit is contained in:
committed by
Ilya Gorbunov
parent
e8597d706d
commit
db131df751
+17
-8
@@ -7,10 +7,11 @@ package org.jetbrains.kotlin.codegen.state
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.load.kotlin.getRepresentativeUpperBound
|
import org.jetbrains.kotlin.load.kotlin.getRepresentativeUpperBound
|
||||||
|
import org.jetbrains.kotlin.resolve.DescriptorUtils.SUCCESS_OR_FAILURE_FQ_NAME
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||||
import org.jetbrains.kotlin.resolve.isInlineClassType
|
import org.jetbrains.kotlin.resolve.isInlineClassType
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
|
|
||||||
fun getInlineClassValueParametersManglingSuffix(descriptor: CallableMemberDescriptor): String? {
|
fun getInlineClassValueParametersManglingSuffix(descriptor: CallableMemberDescriptor): String? {
|
||||||
@@ -19,11 +20,25 @@ fun getInlineClassValueParametersManglingSuffix(descriptor: CallableMemberDescri
|
|||||||
|
|
||||||
val actualValueParameterTypes = listOfNotNull(descriptor.extensionReceiverParameter?.type) + descriptor.valueParameters.map { it.type }
|
val actualValueParameterTypes = listOfNotNull(descriptor.extensionReceiverParameter?.type) + descriptor.valueParameters.map { it.type }
|
||||||
|
|
||||||
if (actualValueParameterTypes.none { it.isInlineClassType() || it.isTypeParameterWithInlineClassUpperBound() }) return null
|
if (actualValueParameterTypes.none { it.requiresFunctionNameMangling() }) return null
|
||||||
|
|
||||||
return md5radix36string(collectSignatureForMangling(actualValueParameterTypes))
|
return md5radix36string(collectSignatureForMangling(actualValueParameterTypes))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun KotlinType.requiresFunctionNameMangling() =
|
||||||
|
isInlineClassThatRequiresMangling() || isTypeParameterWithUpperBoundThatRequiresMangling()
|
||||||
|
|
||||||
|
private fun KotlinType.isInlineClassThatRequiresMangling() =
|
||||||
|
isInlineClassType() && !isDontMangleClass(this.constructor.declarationDescriptor as ClassDescriptor)
|
||||||
|
|
||||||
|
private fun isDontMangleClass(classDescriptor: ClassDescriptor) =
|
||||||
|
classDescriptor.fqNameSafe == SUCCESS_OR_FAILURE_FQ_NAME
|
||||||
|
|
||||||
|
private fun KotlinType.isTypeParameterWithUpperBoundThatRequiresMangling(): Boolean {
|
||||||
|
val descriptor = constructor.declarationDescriptor as? TypeParameterDescriptor ?: return false
|
||||||
|
return getRepresentativeUpperBound(descriptor).requiresFunctionNameMangling()
|
||||||
|
}
|
||||||
|
|
||||||
private fun collectSignatureForMangling(types: List<KotlinType>) =
|
private fun collectSignatureForMangling(types: List<KotlinType>) =
|
||||||
types.joinToString { getSignatureElementForMangling(it) }
|
types.joinToString { getSignatureElementForMangling(it) }
|
||||||
|
|
||||||
@@ -51,9 +66,3 @@ private fun md5radix36string(signatureForMangling: String): String {
|
|||||||
}
|
}
|
||||||
return acc.toString(36)
|
return acc.toString(36)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun KotlinType.isTypeParameterWithInlineClassUpperBound(): Boolean {
|
|
||||||
val descriptor = constructor.declarationDescriptor as? TypeParameterDescriptor ?: return false
|
|
||||||
val bound = getRepresentativeUpperBound(descriptor)
|
|
||||||
return bound.isInlineClassType() || bound.isTypeParameterWithInlineClassUpperBound()
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user