[JS IR] Fix replacing super.toString() call with a runtime function call
#KT-52553 Fixed
This commit is contained in:
+11
-3
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.ir.backend.js.lower.calls
|
||||
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||
import org.jetbrains.kotlin.ir.util.irCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
|
||||
@@ -14,8 +13,8 @@ import org.jetbrains.kotlin.ir.types.IrDynamicType
|
||||
import org.jetbrains.kotlin.ir.types.isAny
|
||||
import org.jetbrains.kotlin.ir.types.isArray
|
||||
import org.jetbrains.kotlin.ir.types.isString
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.util.isFakeOverriddenFromAny
|
||||
import org.jetbrains.kotlin.ir.util.isSuperToAny
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
|
||||
@@ -64,12 +63,21 @@ class MethodsOfAnyCallsTransformer(context: JsIrBackendContext) : CallsTransform
|
||||
|
||||
private fun shouldReplaceToStringWithRuntimeCall(call: IrFunctionAccessExpression): Boolean {
|
||||
val function = call.symbol.owner
|
||||
if (function.valueParameters.size != 0 && function.name.asString() != "toString" )
|
||||
if (function.valueParameters.isNotEmpty() && function.name.asString() != "toString" )
|
||||
return false
|
||||
|
||||
if (function.extensionReceiverParameter != null)
|
||||
return false
|
||||
|
||||
if (call is IrCall) {
|
||||
val superQualifierSymbol = call.superQualifierSymbol
|
||||
if (superQualifierSymbol != null &&
|
||||
!superQualifierSymbol.owner.isInterface &&
|
||||
superQualifierSymbol != intrinsics.anyClassSymbol) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
val receiverParameterType = function.dispatchReceiverParameter?.type ?: return false
|
||||
|
||||
return receiverParameterType.run {
|
||||
|
||||
Reference in New Issue
Block a user