Skip to content

Commit 8f70566

Browse files
committed
https://youtrack.jetbrains.com/issue/KT-53993/IR-kotlin.NotImplementedError-An-operation-is-not-implemented-IrClassImpl-is-not-supported-yet-here#focus=Comments-27-8656878.0-0
1 parent c788e83 commit 8f70566

File tree

1 file changed

+30
-10
lines changed
  • compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/utils

1 file changed

+30
-10
lines changed

compiler/suspend-transform-plugin/src/main/kotlin/love/forte/plugin/suspendtrans/utils/IrFunctionUtils.kt

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
55
import org.jetbrains.kotlin.backend.jvm.ir.fileParent
66
import org.jetbrains.kotlin.descriptors.ClassKind
77
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
8+
import org.jetbrains.kotlin.descriptors.Modality
89
import org.jetbrains.kotlin.ir.builders.*
910
import org.jetbrains.kotlin.ir.builders.declarations.*
1011
import org.jetbrains.kotlin.ir.declarations.*
1112
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
13+
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
1214
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
15+
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
1316
import org.jetbrains.kotlin.ir.types.IrSimpleType
1417
import org.jetbrains.kotlin.ir.types.getClass
1518
import org.jetbrains.kotlin.ir.types.typeOrNull
@@ -146,22 +149,39 @@ fun IrPluginContext.createSuspendLambdaFunctionWithCoroutineScope(
146149
function: IrFunction,
147150
blockBodyBuilder: IrBlockBodyBuilder
148151
): IrSimpleFunction {
149-
val func = IrFactoryImpl.buildFun {
150-
name = SpecialNames.NO_NAME_PROVIDED
151-
visibility = DescriptorVisibilities.LOCAL
152-
isSuspend = true
153-
returnType = function.returnType
154-
}
152+
val func = IrFunctionImpl(
153+
startOffset = -1,
154+
endOffset = -1,
155+
origin = IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA,
156+
name = SpecialNames.NO_NAME_PROVIDED,
157+
visibility = DescriptorVisibilities.LOCAL,
158+
isInline = false,
159+
isExpect = false,
160+
returnType = function.returnType,
161+
modality = Modality.FINAL,
162+
symbol = IrSimpleFunctionSymbolImpl(),
163+
isSuspend = true,
164+
isTailrec = false,
165+
isOperator = false,
166+
isInfix = false,
167+
isExternal = false,
168+
)
169+
170+
// val func1 = IrFactoryImpl.buildFun {
171+
// name = SpecialNames.NO_NAME_PROVIDED
172+
// visibility = DescriptorVisibilities.LOCAL
173+
// isSuspend = true
174+
// returnType = function.returnType
175+
// }
155176

156177
with(func) {
157178
parent = function
158-
origin = IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA
159-
179+
// origin = IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA
160180

161181
body = createIrBuilder(symbol).run {
162182
// don't use expr body, coroutine codegen can't generate for it.
163183
irBlockBody {
164-
+irCall(originFunction).apply call@{
184+
+irReturn(irCall(originFunction).apply call@{
165185
// set arguments
166186
function.dispatchReceiverParameter?.also {
167187
this@call.dispatchReceiver = irGet(it)
@@ -174,7 +194,7 @@ fun IrPluginContext.createSuspendLambdaFunctionWithCoroutineScope(
174194
for ((index, parameter) in function.valueParameters.withIndex()) {
175195
this@call.putValueArgument(index, irGet(parameter))
176196
}
177-
}
197+
})
178198
}
179199
}
180200
}

0 commit comments

Comments
 (0)