[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.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 =
|
||||
|
||||
+1
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user