diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt index 6eb58d646a6..6a6ba337354 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol +import org.jetbrains.kotlin.ir.types.IrDynamicType import org.jetbrains.kotlin.ir.util.isFunctionTypeOrSubtype import org.jetbrains.kotlin.js.backend.ast.* import org.jetbrains.kotlin.util.OperatorNameConventions @@ -107,15 +108,11 @@ class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer throw IllegalStateException("All type operator calls except IMPLICIT_CAST should be lowered at this point") } } + + private fun isNativeInvoke(call: IrCall): Boolean { + val simpleFunction = call.symbol.owner as? IrSimpleFunction ?: return false + val receiverType = simpleFunction.dispatchReceiverParameter?.type ?: return false + + if (simpleFunction.isSuspend) return false + + if (receiverType is IrDynamicType) return call.origin == IrStatementOrigin.INVOKE + + return simpleFunction.name == OperatorNameConventions.INVOKE && receiverType.isFunctionTypeOrSubtype() + } } \ No newline at end of file