[JS IR] Change global map in context to mapping

^KT-46204 fixed
This commit is contained in:
Ilya Goncharov
2021-08-04 14:25:39 +03:00
committed by Space
parent a28138eb72
commit 2f0f88062a
4 changed files with 11 additions and 9 deletions
@@ -65,8 +65,6 @@ class JsIrBackendContext(
val fileToInitializationFuns: MutableMap<IrFile, IrSimpleFunction?> = mutableMapOf() val fileToInitializationFuns: MutableMap<IrFile, IrSimpleFunction?> = mutableMapOf()
val fileToInitializerPureness: MutableMap<IrFile, Boolean> = mutableMapOf() val fileToInitializerPureness: MutableMap<IrFile, Boolean> = mutableMapOf()
val suspendArityStore: MutableMap<IrDeclaration, Set<Int>> = mutableMapOf()
val extractedLocalClasses: MutableSet<IrClass> = hashSetOf() val extractedLocalClasses: MutableSet<IrClass> = hashSetOf()
override val builtIns = module.builtIns override val builtIns = module.builtIns
@@ -10,18 +10,19 @@ import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import kotlin.collections.set
class JsSuspendArityStoreLowering(private val context: JsIrBackendContext) : DeclarationTransformer { class JsSuspendArityStoreLowering(context: JsIrBackendContext) : DeclarationTransformer {
private var IrClass.suspendArityStore by context.mapping.suspendArityStore
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? { override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
if (declaration !is IrClass) return null if (declaration !is IrClass) return null
declaration.declarations declaration.declarations
.filterIsInstance<IrSimpleFunction>() .filterIsInstance<IrSimpleFunction>()
.filter { it.isSuspend } .filter { it.isSuspend }
.map { it.valueParameters.size }
.let { .let {
context.suspendArityStore[declaration] = it.toSet() declaration.suspendArityStore = it
} }
return null return null
@@ -234,9 +234,10 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
private fun isCoroutineClass(): Boolean = irClass.superTypes.any { it.isSuspendFunctionTypeOrSubtype() } private fun isCoroutineClass(): Boolean = irClass.superTypes.any { it.isSuspendFunctionTypeOrSubtype() }
private fun generateSuspendArity(): JsPropertyInitializer? { private fun generateSuspendArity(): JsPropertyInitializer {
val arity = context.staticContext.backendContext.suspendArityStore val arity = context.staticContext.backendContext.mapping.suspendArityStore[irClass]!!
.getValue(irClass) .map { it.valueParameters.size }
.distinct()
.map { JsIntLiteral(it) } .map { JsIntLiteral(it) }
return JsPropertyInitializer(JsNameRef(Namer.METADATA_SUSPEND_ARITY), JsArrayLiteral(arity)) return JsPropertyInitializer(JsNameRef(Namer.METADATA_SUSPEND_ARITY), JsArrayLiteral(arity))
@@ -35,6 +35,8 @@ class JsMapping(val state: JsMappingState) : DefaultMapping(state) {
val enumConstructorOldToNewValueParameters = state.newDeclarationToDeclarationMapping<IrValueDeclaration, IrValueParameter>() val enumConstructorOldToNewValueParameters = state.newDeclarationToDeclarationMapping<IrValueDeclaration, IrValueParameter>()
val enumEntryToCorrespondingField = state.newDeclarationToDeclarationMapping<IrEnumEntry, IrField>() val enumEntryToCorrespondingField = state.newDeclarationToDeclarationMapping<IrEnumEntry, IrField>()
val enumClassToInitEntryInstancesFun = state.newDeclarationToDeclarationMapping<IrClass, IrSimpleFunction>() val enumClassToInitEntryInstancesFun = state.newDeclarationToDeclarationMapping<IrClass, IrSimpleFunction>()
val suspendArityStore = state.newDeclarationToDeclarationCollectionMapping<IrClass, Collection<IrSimpleFunction>>()
} }