[JS IR][Wasm] Preload (Suspend)FunctionN needed in lowerings
This reverts commit 15d178d850d15675ee39cbd833d13f4c8aed83ff.
This commit is contained in:
@@ -79,6 +79,7 @@ interface IrDeclarationOrigin {
|
||||
|
||||
object FIELD_FOR_OUTER_THIS : IrDeclarationOriginImpl("FIELD_FOR_OUTER_THIS", isSynthetic = true)
|
||||
object CONTINUATION : IrDeclarationOriginImpl("CONTINUATION", isSynthetic = true)
|
||||
object LOWERED_SUSPEND_FUNCTION : IrDeclarationOriginImpl("LOWERED_SUSPEND_FUNCTION", isSynthetic = true)
|
||||
|
||||
val isSynthetic: Boolean get() = false
|
||||
}
|
||||
|
||||
+9
-1
@@ -85,7 +85,9 @@ abstract class IrAbstractDescriptorBasedFunctionFactory {
|
||||
class IrDescriptorBasedFunctionFactory(
|
||||
private val irBuiltIns: IrBuiltInsOverDescriptors,
|
||||
private val symbolTable: SymbolTable,
|
||||
getPackageFragment: ((PackageFragmentDescriptor) -> IrPackageFragment)? = null
|
||||
getPackageFragment: ((PackageFragmentDescriptor) -> IrPackageFragment)? = null,
|
||||
// Needed for JS and Wasm backends to "preload" interfaces that can referenced during lowerings
|
||||
private val referenceFunctionsWhenKFunctionAreReferenced: Boolean = false,
|
||||
) : IrAbstractDescriptorBasedFunctionFactory() {
|
||||
val getPackageFragment =
|
||||
getPackageFragment ?: symbolTable::declareExternalPackageFragmentIfNotExists
|
||||
@@ -139,6 +141,9 @@ class IrDescriptorBasedFunctionFactory(
|
||||
}
|
||||
|
||||
override fun kFunctionN(arity: Int, declarator: SymbolTable.((IrClassSymbol) -> IrClass) -> IrClass): IrClass {
|
||||
if (referenceFunctionsWhenKFunctionAreReferenced)
|
||||
functionN(arity)
|
||||
|
||||
return kFunctionNMap.getOrPut(arity) {
|
||||
symbolTable.declarator { symbol ->
|
||||
val descriptor = symbol.descriptor as FunctionClassDescriptor
|
||||
@@ -149,6 +154,9 @@ class IrDescriptorBasedFunctionFactory(
|
||||
}
|
||||
|
||||
override fun kSuspendFunctionN(arity: Int, declarator: SymbolTable.((IrClassSymbol) -> IrClass) -> IrClass): IrClass {
|
||||
if (referenceFunctionsWhenKFunctionAreReferenced)
|
||||
suspendFunctionN(arity)
|
||||
|
||||
return kSuspendFunctionNMap.getOrPut(arity) {
|
||||
symbolTable.declarator { symbol ->
|
||||
val descriptor = symbol.descriptor as FunctionClassDescriptor
|
||||
|
||||
Reference in New Issue
Block a user