[JS] Manually change receiver's type of Char's equals method
Char's equals method in js doesn't work properly because now equals method is not fake override in Char, but it is actual override and so when we call equals for some char in js, it will not be boxed. To fix it we need to get correct receiver's type.
This commit is contained in:
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.js.translate.callTranslator
|
package org.jetbrains.kotlin.js.translate.callTranslator
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.contracts.parsing.isEqualsDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
@@ -137,8 +139,12 @@ private fun TranslationContext.createCallInfo(
|
|||||||
|
|
||||||
var dispatchReceiver = getDispatchReceiver()
|
var dispatchReceiver = getDispatchReceiver()
|
||||||
var dispatchReceiverType = resolvedCall.smartCastDispatchReceiverType ?: resolvedCall.dispatchReceiver?.type
|
var dispatchReceiverType = resolvedCall.smartCastDispatchReceiverType ?: resolvedCall.dispatchReceiver?.type
|
||||||
if (dispatchReceiverType != null && (resolvedCall.resultingDescriptor as? FunctionDescriptor)?.kind?.isReal == false) {
|
if (dispatchReceiverType != null) {
|
||||||
dispatchReceiverType = TranslationUtils.getDispatchReceiverTypeForCoercion(resolvedCall.resultingDescriptor)
|
if ((resolvedCall.resultingDescriptor as? FunctionDescriptor)?.kind?.isReal == false) {
|
||||||
|
dispatchReceiverType = TranslationUtils.getDispatchReceiverTypeForCoercion(resolvedCall.resultingDescriptor)
|
||||||
|
} else if (KotlinBuiltIns.isChar(dispatchReceiverType) && resolvedCall.resultingDescriptor.isEqualsDescriptor()) {
|
||||||
|
dispatchReceiverType = resolvedCall.resultingDescriptor.overriddenDescriptors.single().dispatchReceiverParameter!!.type
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var extensionReceiver = getExtensionReceiver()
|
var extensionReceiver = getExtensionReceiver()
|
||||||
var notNullConditional: JsConditional? = null
|
var notNullConditional: JsConditional? = null
|
||||||
|
|||||||
Reference in New Issue
Block a user