[Minor] Refactor IR Suspend Main code to not use intrinsic
This commit is contained in:
committed by
Ilmir Usmanov
parent
a3d85e108f
commit
fe71d5256c
@@ -248,7 +248,10 @@ class JvmSymbols(
|
|||||||
klass.superTypes += suspendFunctionInterface.defaultType
|
klass.superTypes += suspendFunctionInterface.defaultType
|
||||||
klass.addConstructor().apply {
|
klass.addConstructor().apply {
|
||||||
addValueParameter("arity", irBuiltIns.intType)
|
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 {
|
klass.addFunction(INVOKE_SUSPEND_METHOD_NAME, irBuiltIns.anyNType, Modality.ABSTRACT, Visibilities.PROTECTED).apply {
|
||||||
addValueParameter(SUSPEND_CALL_RESULT_NAME, resultClassStub.typeWith(irBuiltIns.anyNType))
|
addValueParameter(SUSPEND_CALL_RESULT_NAME, resultClassStub.typeWith(irBuiltIns.anyNType))
|
||||||
@@ -607,15 +610,20 @@ class JvmSymbols(
|
|||||||
val enumValueOfFunction: IrSimpleFunctionSymbol =
|
val enumValueOfFunction: IrSimpleFunctionSymbol =
|
||||||
javaLangEnum.functionByName("valueOf")
|
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 =
|
val runSuspendFunction: IrSimpleFunctionSymbol =
|
||||||
buildFun {
|
kotlinCoroutinesJvmInternalRunSuspendKt.functionByName("runSuspend")
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrClassSymbol.functionByName(name: String): IrSimpleFunctionSymbol =
|
private fun IrClassSymbol.functionByName(name: String): IrSimpleFunctionSymbol =
|
||||||
|
|||||||
+1
-2
@@ -104,8 +104,7 @@ class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) {
|
|||||||
irBuiltIns.dataClassArrayMemberToStringSymbol.toKey()!! to IrDataClassArrayMemberToString,
|
irBuiltIns.dataClassArrayMemberToStringSymbol.toKey()!! to IrDataClassArrayMemberToString,
|
||||||
symbols.unsafeCoerceIntrinsic.toKey()!! to UnsafeCoerce,
|
symbols.unsafeCoerceIntrinsic.toKey()!! to UnsafeCoerce,
|
||||||
symbols.signatureStringIntrinsic.toKey()!! to SignatureString,
|
symbols.signatureStringIntrinsic.toKey()!! to SignatureString,
|
||||||
symbols.reassignParameterIntrinsic.toKey()!! to ReassignParameter,
|
symbols.reassignParameterIntrinsic.toKey()!! to ReassignParameter
|
||||||
symbols.runSuspendFunction.toKey()!! to RunSuspend
|
|
||||||
) +
|
) +
|
||||||
numberConversionMethods() +
|
numberConversionMethods() +
|
||||||
unaryFunForPrimitives("plus", UnaryPlus) +
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user