[JS IR] Rename and doc new intrinsics, add new intrinsic to call suspend fun as supertype

^KT-46204 fixed
This commit is contained in:
Ilya Goncharov
2021-08-02 15:40:38 +03:00
committed by Space
parent a70fc99130
commit e6af3ff6a8
3 changed files with 48 additions and 34 deletions
@@ -163,9 +163,12 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
get() = context.ir.symbols.coroutineContextGetter
val jsGetContinuation = getInternalFunction("getContinuation")
val jsInvokeSuspendFunction = getInternalWithoutPackage("kotlin.coroutines.intrinsics.invokeSuspendFunction")
val jsInvokeSuspendFunctionWithReceiver = getInternalWithoutPackage("kotlin.coroutines.intrinsics.invokeSuspendFunctionWithReceiver")
val jsInvokeSuspendFunctionWithReceiverAndParam = getInternalWithoutPackage("kotlin.coroutines.intrinsics.invokeSuspendFunctionWithReceiverAndParam")
val jsInvokeSuspendSuperType =
getInternalWithoutPackage("kotlin.coroutines.intrinsics.invokeSuspendSuperType")
val jsInvokeSuspendSuperTypeWithReceiver =
getInternalWithoutPackage("kotlin.coroutines.intrinsics.invokeSuspendSuperTypeWithReceiver")
val jsInvokeSuspendSuperTypeWithReceiverAndParam =
getInternalWithoutPackage("kotlin.coroutines.intrinsics.invokeSuspendSuperTypeWithReceiverAndParam")
val jsGetKClass = getInternalWithoutPackage("getKClass")
val jsGetKClassFromExpression = getInternalWithoutPackage("getKClassFromExpression")
@@ -13,15 +13,15 @@ import org.jetbrains.kotlin.ir.backend.js.utils.getClassRef
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
import org.jetbrains.kotlin.ir.expressions.IrGetField
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.types.getClass
import org.jetbrains.kotlin.ir.util.getInlineClassBackingField
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.js.backend.ast.*
import java.lang.IllegalArgumentException
typealias IrCallTransformer = (IrCall, context: JsGenerationContext) -> JsExpression
@@ -233,16 +233,9 @@ class JsIntrinsicTransformers(backendContext: JsIrBackendContext) {
// Because it is intrinsic, we know everything about this function
// There is callable reference as extension receiver
val invokeFun = (call.extensionReceiver as IrCall)
// Single parameter is field
.getValueArgument(0)
.let { it as IrGetField }
.symbol
.owner
// It should be SuspendFunctionN
.getValueArgument(0)!!
.type
.classifierOrFail
.owner
.let { it as IrClass }
.getClass()!!
.declarations
.filterIsInstance<IrSimpleFunction>()
.single { it.name.asString() == "invoke" }
@@ -280,9 +273,9 @@ class JsIntrinsicTransformers(backendContext: JsIrBackendContext) {
JsInvocation(jsExtensionReceiver, args)
}
add(intrinsics.jsInvokeSuspendFunction, suspendInvokeTransform)
add(intrinsics.jsInvokeSuspendFunctionWithReceiver, suspendInvokeTransform)
add(intrinsics.jsInvokeSuspendFunctionWithReceiverAndParam, suspendInvokeTransform)
add(intrinsics.jsInvokeSuspendSuperType, suspendInvokeTransform)
add(intrinsics.jsInvokeSuspendSuperTypeWithReceiver, suspendInvokeTransform)
add(intrinsics.jsInvokeSuspendSuperTypeWithReceiverAndParam, suspendInvokeTransform)
}
}