Resolve variadic vs. normal arguments conflicts in LLVM signatures. (#1357)

This commit is contained in:
Nikolay Igotti
2018-02-22 19:02:31 +03:00
committed by GitHub
parent 08a5fdaaf7
commit 6e3d751a17
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.calls.components.isVararg
import org.jetbrains.kotlin.resolve.constants.StringValue import org.jetbrains.kotlin.resolve.constants.StringValue
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors
@@ -149,11 +150,9 @@ private fun typeToHashString(type: KotlinType)
private val FunctionDescriptor.signature: String private val FunctionDescriptor.signature: String
get() { get() {
val extensionReceiverPart = this.extensionReceiverParameter?.let { "@${typeToHashString(it.type)}." } ?: "" val extensionReceiverPart = this.extensionReceiverParameter?.let { "@${typeToHashString(it.type)}." } ?: ""
val argsPart = this.valueParameters.map { val argsPart = this.valueParameters.map {
typeToHashString(it.type) "${typeToHashString(it.type)}${if (it.isVararg) "_VarArg" else ""}"
}.joinToString(";") }.joinToString(";")
// Distinguish value types and references - it's needed for calling virtual methods through bridges. // Distinguish value types and references - it's needed for calling virtual methods through bridges.
// Also is function has type arguments - frontend allows exactly matching overrides. // Also is function has type arguments - frontend allows exactly matching overrides.
val signatureSuffix = val signatureSuffix =
@@ -163,7 +162,6 @@ private val FunctionDescriptor.signature: String
returnType.let { it != null && !KotlinBuiltIns.isUnitOrNullableUnit(it) } -> typeToHashString(returnType!!) returnType.let { it != null && !KotlinBuiltIns.isUnitOrNullableUnit(it) } -> typeToHashString(returnType!!)
else -> "" else -> ""
} }
return "$extensionReceiverPart($argsPart)$signatureSuffix" return "$extensionReceiverPart($argsPart)$signatureSuffix"
} }