[JS IR] Fix inline classes for new callable reference scheme
This commit is contained in:
+4
-2
@@ -162,19 +162,21 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo
|
|||||||
val constructor = expression.symbol.owner
|
val constructor = expression.symbol.owner
|
||||||
val lambdaClass = constructor.parentAsClass
|
val lambdaClass = constructor.parentAsClass
|
||||||
val invokeFun = lambdaClass.declarations.filterIsInstance<IrSimpleFunction>().single { it.name.asString() == "invoke" }
|
val invokeFun = lambdaClass.declarations.filterIsInstance<IrSimpleFunction>().single { it.name.asString() == "invoke" }
|
||||||
|
val superInvokeFun = invokeFun.overriddenSymbols.single { it.owner.isSuspend == invokeFun.isSuspend }.owner
|
||||||
val lambdaName = Name.identifier("${lambdaClass.name.asString()}\$lambda")
|
val lambdaName = Name.identifier("${lambdaClass.name.asString()}\$lambda")
|
||||||
|
|
||||||
val lambdaDeclaration = buildFun {
|
val lambdaDeclaration = buildFun {
|
||||||
startOffset = invokeFun.startOffset
|
startOffset = invokeFun.startOffset
|
||||||
endOffset = invokeFun.endOffset
|
endOffset = invokeFun.endOffset
|
||||||
returnType = invokeFun.returnType
|
// Since box/unbox is done on declaration side in case of suspend function use the specified type
|
||||||
|
returnType = if (invokeFun.isSuspend) invokeFun.returnType else superInvokeFun.returnType
|
||||||
name = lambdaName
|
name = lambdaName
|
||||||
isSuspend = invokeFun.isSuspend
|
isSuspend = invokeFun.isSuspend
|
||||||
}
|
}
|
||||||
|
|
||||||
lambdaDeclaration.parent = factoryFunction
|
lambdaDeclaration.parent = factoryFunction
|
||||||
|
|
||||||
lambdaDeclaration.valueParameters = invokeFun.valueParameters.map { it.copyTo(lambdaDeclaration) }
|
lambdaDeclaration.valueParameters = superInvokeFun.valueParameters.map { it.copyTo(lambdaDeclaration) }
|
||||||
|
|
||||||
val statements = ArrayList<IrStatement>(4)
|
val statements = ArrayList<IrStatement>(4)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user