[Wasm] Generate [K][Suspend]FunctionN on demand and support big arity

This commit is contained in:
Svyatoslav Kuzmich
2021-10-06 14:09:41 +03:00
parent 64a30cd95e
commit 1ed2748334
19 changed files with 38 additions and 468 deletions
@@ -83,8 +83,12 @@ abstract class IrAbstractDescriptorBasedFunctionFactory {
@OptIn(ObsoleteDescriptorBasedAPI::class)
class IrDescriptorBasedFunctionFactory(
private val irBuiltIns: IrBuiltInsOverDescriptors, private val symbolTable: SymbolTable
private val irBuiltIns: IrBuiltInsOverDescriptors,
private val symbolTable: SymbolTable,
getPackageFragment: ((PackageFragmentDescriptor) -> IrPackageFragment)? = null
) : IrAbstractDescriptorBasedFunctionFactory() {
val getPackageFragment =
getPackageFragment ?: symbolTable::declareExternalPackageFragmentIfNotExists
// TODO: Lazieness
@@ -230,18 +234,18 @@ class IrDescriptorBasedFunctionFactory(
private val kotlinPackageFragment: IrPackageFragment by lazy {
irBuiltIns.builtIns.getFunction(0).let {
symbolTable.declareExternalPackageFragmentIfNotExists(it.containingDeclaration as PackageFragmentDescriptor)
getPackageFragment(it.containingDeclaration as PackageFragmentDescriptor)
}
}
private val kotlinCoroutinesPackageFragment: IrPackageFragment by lazy {
irBuiltIns.builtIns.getSuspendFunction(0).let {
symbolTable.declareExternalPackageFragmentIfNotExists(it.containingDeclaration as PackageFragmentDescriptor)
getPackageFragment(it.containingDeclaration as PackageFragmentDescriptor)
}
}
private val kotlinReflectPackageFragment: IrPackageFragment by lazy {
irBuiltIns.kPropertyClass.descriptor.let {
symbolTable.declareExternalPackageFragmentIfNotExists(it.containingDeclaration as PackageFragmentDescriptor)
getPackageFragment(it.containingDeclaration as PackageFragmentDescriptor)
}
}