[JS IR] Fix replacing super.toString() call with a runtime function call

#KT-52553 Fixed
This commit is contained in:
Sergej Jaskiewicz
2022-05-30 18:55:06 +03:00
committed by Space
parent f2111c9dc8
commit da7ff5b868
2 changed files with 24 additions and 4 deletions
@@ -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 {