[IR] Read isExpect directly from IrDeclaration without using descriptor

This commit is contained in:
Mikhail Glukhikh
2020-05-19 18:41:44 +03:00
parent 934b040152
commit cacf5f5a4a
3 changed files with 6 additions and 5 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.DeclarationTransformer import org.jetbrains.kotlin.backend.common.DeclarationTransformer
import org.jetbrains.kotlin.backend.common.getOrPut import org.jetbrains.kotlin.backend.common.getOrPut
import org.jetbrains.kotlin.backend.common.ir.copyParameterDeclarationsFrom import org.jetbrains.kotlin.backend.common.ir.copyParameterDeclarationsFrom
import org.jetbrains.kotlin.backend.common.ir.isExpect
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlockBody import org.jetbrains.kotlin.backend.common.lower.irBlockBody
import org.jetbrains.kotlin.backend.common.lower.irIfThen import org.jetbrains.kotlin.backend.common.lower.irIfThen
@@ -102,7 +103,7 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? { override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
(declaration.parent as? IrClass)?.let { irClass -> (declaration.parent as? IrClass)?.let { irClass ->
if (!irClass.isEnumClass || irClass.descriptor.isExpect || irClass.isEffectivelyExternal()) return null if (!irClass.isEnumClass || irClass.isExpect || irClass.isEffectivelyExternal()) return null
if (declaration is IrConstructor) { if (declaration is IrConstructor) {
// Add `name` and `ordinal` parameters to enum class constructors // Add `name` and `ordinal` parameters to enum class constructors
@@ -317,7 +318,7 @@ class EnumClassConstructorBodyTransformer(val context: JsCommonBackendContext) :
//------------------------------------------------------- //-------------------------------------------------------
private val IrClass.goodEnum: Boolean private val IrClass.goodEnum: Boolean
get() = isEnumClass && !descriptor.isExpect && !isEffectivelyExternal() get() = isEnumClass && !isExpect && !isEffectivelyExternal()
class EnumEntryInstancesLowering(val context: JsIrBackendContext) : DeclarationTransformer { class EnumEntryInstancesLowering(val context: JsIrBackendContext) : DeclarationTransformer {
@@ -552,7 +553,7 @@ private val IrClass.enumEntries: List<IrEnumEntry>
class EnumClassRemoveEntriesLowering(val context: JsIrBackendContext) : DeclarationTransformer { class EnumClassRemoveEntriesLowering(val context: JsIrBackendContext) : DeclarationTransformer {
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? { override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
// Remove IrEnumEntry nodes from class declarations. Replace them with corresponding class declarations (if they have them). // Remove IrEnumEntry nodes from class declarations. Replace them with corresponding class declarations (if they have them).
if (declaration is IrEnumEntry && !declaration.descriptor.isExpect && !declaration.isEffectivelyExternal()) { if (declaration is IrEnumEntry && !declaration.isExpect && !declaration.isEffectivelyExternal()) {
return listOfNotNull(declaration.correspondingClass) return listOfNotNull(declaration.correspondingClass)
} }
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.js.backend.ast.JsVars
class IrDeclarationToJsTransformer : BaseIrElementToJsNodeTransformer<JsStatement, JsGenerationContext> { class IrDeclarationToJsTransformer : BaseIrElementToJsNodeTransformer<JsStatement, JsGenerationContext> {
override fun visitSimpleFunction(declaration: IrSimpleFunction, context: JsGenerationContext): JsStatement { override fun visitSimpleFunction(declaration: IrSimpleFunction, context: JsGenerationContext): JsStatement {
require(!declaration.descriptor.isExpect) require(!declaration.isExpect)
return declaration.accept(IrFunctionToJsTransformer(), context).makeStmt() return declaration.accept(IrFunctionToJsTransformer(), context).makeStmt()
} }
@@ -35,7 +35,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
private val es6mode = context.staticContext.backendContext.es6mode private val es6mode = context.staticContext.backendContext.es6mode
fun generate(): JsStatement { fun generate(): JsStatement {
assert(!irClass.descriptor.isExpect) assert(!irClass.isExpect)
if (!es6mode) maybeGeneratePrimaryConstructor() if (!es6mode) maybeGeneratePrimaryConstructor()
val transformer = IrDeclarationToJsTransformer() val transformer = IrDeclarationToJsTransformer()