[IR] Read isExpect directly from IrDeclaration without using descriptor
This commit is contained in:
+4
-3
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user