[Minor] Refactor IR Suspend Main code to not use intrinsic

This commit is contained in:
Kristoffer Andersen
2020-02-21 11:20:33 +01:00
committed by Ilmir Usmanov
parent a3d85e108f
commit fe71d5256c
3 changed files with 18 additions and 33 deletions
@@ -248,7 +248,10 @@ class JvmSymbols(
klass.superTypes += suspendFunctionInterface.defaultType
klass.addConstructor().apply {
addValueParameter("arity", irBuiltIns.intType)
addValueParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, continuationClass.typeWith(irBuiltIns.anyNType).makeNullable())
addValueParameter(
SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME,
continuationClass.typeWith(irBuiltIns.anyNType).makeNullable()
)
}
klass.addFunction(INVOKE_SUSPEND_METHOD_NAME, irBuiltIns.anyNType, Modality.ABSTRACT, Visibilities.PROTECTED).apply {
addValueParameter(SUSPEND_CALL_RESULT_NAME, resultClassStub.typeWith(irBuiltIns.anyNType))
@@ -607,15 +610,20 @@ class JvmSymbols(
val enumValueOfFunction: IrSimpleFunctionSymbol =
javaLangEnum.functionByName("valueOf")
private val kotlinCoroutinesJvmInternalRunSuspendKt =
createClass(FqName("kotlin.coroutines.jvm.internal.RunSuspendKt")) { klass ->
klass.addFunction("runSuspend", irBuiltIns.unitType, isStatic = true).apply {
addValueParameter(
"block",
getJvmSuspendFunctionClass(0).typeWith(
irBuiltIns.unitType
)
)
}
}
val runSuspendFunction: IrSimpleFunctionSymbol =
buildFun {
name = Name.identifier("runSuspend")
origin = IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
}.apply {
parent = kotlinCoroutinesJvmInternalPackage
returnType = irBuiltIns.unitType
addValueParameter("block", getJvmSuspendFunctionClass(0).typeWith(continuationClass.typeWith(irBuiltIns.unitType), irBuiltIns.anyNType))
}.symbol
kotlinCoroutinesJvmInternalRunSuspendKt.functionByName("runSuspend")
}
private fun IrClassSymbol.functionByName(name: String): IrSimpleFunctionSymbol =
@@ -104,8 +104,7 @@ class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) {
irBuiltIns.dataClassArrayMemberToStringSymbol.toKey()!! to IrDataClassArrayMemberToString,
symbols.unsafeCoerceIntrinsic.toKey()!! to UnsafeCoerce,
symbols.signatureStringIntrinsic.toKey()!! to SignatureString,
symbols.reassignParameterIntrinsic.toKey()!! to ReassignParameter,
symbols.runSuspendFunction.toKey()!! to RunSuspend
symbols.reassignParameterIntrinsic.toKey()!! to ReassignParameter
) +
numberConversionMethods() +
unaryFunForPrimitives("plus", UnaryPlus) +
@@ -1,22 +0,0 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.backend.jvm.intrinsics
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
object RunSuspend : IntrinsicMethod() {
override fun toCallable(
expression: IrFunctionAccessExpression,
signature: JvmMethodSignature,
context: JvmBackendContext
): IrIntrinsicFunction {
return IrIntrinsicFunction.create(expression, signature, context) {
it.invokestatic("kotlin/coroutines/jvm/internal/RunSuspendKt", "runSuspend", "(Lkotlin/jvm/functions/Function1;)V", false)
}
}
}