TMP: pack flags as tightly as possible
diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt
index 7025a2d..111bd4b 100644
--- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt
+++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt
@@ -46,40 +46,40 @@
symbol.bind(this)
}
- private var flags: Int = modality.toFlags() or
- isCompanion.toFlag(IrFlags.IS_COMPANION) or isInner.toFlag(IrFlags.IS_INNER) or isData.toFlag(IrFlags.IS_DATA) or
- isExternal.toFlag(IrFlags.IS_EXTERNAL) or isInline.toFlag(IrFlags.IS_INLINE) or isExpect.toFlag(IrFlags.IS_EXPECT) or
- isFun.toFlag(IrFlags.IS_FUN)
+ private var flags = (modality.toFlags() or
+ isCompanion.toFlag(IS_COMPANION_BIT) or isInner.toFlag(IS_INNER_BIT) or isData.toFlag(IS_DATA_BIT) or
+ isExternal.toFlag(IS_EXTERNAL_BIT) or isInline.toFlag(IS_INLINE_BIT) or isExpect.toFlag(IS_EXPECT_BIT) or
+ isFun.toFlag(IS_FUN_BIT)).toShort()
override val factory: IrFactory
get() = IrFactoryImpl
override var modality: Modality
- get() = flags.toModality()
+ get() = flags.toInt().toModality()
set(value) {
- flags = flags.setModality(value)
+ flags = flags.toInt().setModality(value).toShort()
}
override val isCompanion: Boolean
- get() = flags.getFlag(IrFlags.IS_COMPANION)
+ get() = flags.toInt().getFlag(IS_COMPANION_BIT)
override val isInner: Boolean
- get() = flags.getFlag(IrFlags.IS_INNER)
+ get() = flags.toInt().getFlag(IS_INNER_BIT)
override val isData: Boolean
- get() = flags.getFlag(IrFlags.IS_DATA)
+ get() = flags.toInt().getFlag(IS_DATA_BIT)
override val isExternal: Boolean
- get() = flags.getFlag(IrFlags.IS_EXTERNAL)
+ get() = flags.toInt().getFlag(IS_EXTERNAL_BIT)
override val isInline: Boolean
- get() = flags.getFlag(IrFlags.IS_INLINE)
+ get() = flags.toInt().getFlag(IS_INLINE_BIT)
override val isExpect: Boolean
- get() = flags.getFlag(IrFlags.IS_EXPECT)
+ get() = flags.toInt().getFlag(IS_EXPECT_BIT)
override val isFun: Boolean
- get() = flags.getFlag(IrFlags.IS_FUN)
+ get() = flags.toInt().getFlag(IS_FUN_BIT)
override lateinit var parent: IrDeclarationParent
override var annotations: List<IrConstructorCall> = emptyList()
@@ -99,4 +99,14 @@
override var metadata: MetadataSource? = null
override var attributeOwnerId: IrAttributeContainer = this
+
+ private companion object {
+ const val IS_COMPANION_BIT = 1 shl (IrFlags.MODALITY_BITS + 0)
+ const val IS_INNER_BIT = 1 shl (IrFlags.MODALITY_BITS + 1)
+ const val IS_DATA_BIT = 1 shl (IrFlags.MODALITY_BITS + 2)
+ const val IS_EXTERNAL_BIT = 1 shl (IrFlags.MODALITY_BITS + 3)
+ const val IS_INLINE_BIT = 1 shl (IrFlags.MODALITY_BITS + 4)
+ const val IS_EXPECT_BIT = 1 shl (IrFlags.MODALITY_BITS + 5)
+ const val IS_FUN_BIT = 1 shl (IrFlags.MODALITY_BITS + 6)
+ }
}
diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt
index 231fcb7..ced26bc 100644
--- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt
+++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrConstructorImpl.kt
@@ -18,7 +18,6 @@
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
-import org.jetbrains.kotlin.ir.IrFlags
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrBody
@@ -50,20 +49,20 @@
symbol.bind(this)
}
- val flags: Int = isInline.toFlag(IrFlags.IS_INLINE) or isExternal.toFlag(IrFlags.IS_EXTERNAL) or
- isPrimary.toFlag(IrFlags.IS_PRIMARY) or isExpect.toFlag(IrFlags.IS_EXPECT)
+ val flags = (isInline.toFlag(IS_INLINE_BIT) or isExternal.toFlag(IS_EXTERNAL_BIT) or
+ isPrimary.toFlag(IS_PRIMARY_BIT) or isExpect.toFlag(IS_EXPECT_BIT)).toByte()
override val isInline: Boolean
- get() = flags.getFlag(IrFlags.IS_INLINE)
+ get() = flags.toInt().getFlag(IS_INLINE_BIT)
override val isExternal: Boolean
- get() = flags.getFlag(IrFlags.IS_EXTERNAL)
+ get() = flags.toInt().getFlag(IS_EXTERNAL_BIT)
override val isPrimary: Boolean
- get() = flags.getFlag(IrFlags.IS_PRIMARY)
+ get() = flags.toInt().getFlag(IS_PRIMARY_BIT)
override val isExpect: Boolean
- get() = flags.getFlag(IrFlags.IS_EXPECT)
+ get() = flags.toInt().getFlag(IS_EXPECT_BIT)
override val factory: IrFactory
get() = IrFactoryImpl
@@ -91,4 +90,11 @@
@ObsoleteDescriptorBasedAPI
override val descriptor: ClassConstructorDescriptor
get() = symbol.descriptor
+
+ private companion object {
+ const val IS_INLINE_BIT = 1 shl 0
+ const val IS_EXTERNAL_BIT = 1 shl 1
+ const val IS_PRIMARY_BIT = 1 shl 2
+ const val IS_EXPECT_BIT = 1 shl 3
+ }
}
diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt
index 533b98b..02ff117 100644
--- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt
+++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFieldImpl.kt
@@ -18,7 +18,6 @@
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
-import org.jetbrains.kotlin.ir.IrFlags
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
@@ -46,19 +45,19 @@
symbol.bind(this)
}
- private val flags = isFinal.toFlag(IrFlags.IS_FINAL) or isExternal.toFlag(IrFlags.IS_EXTERNAL) or isStatic.toFlag(IrFlags.IS_STATIC)
+ private val flags = (isFinal.toFlag(IS_FINAL_BIT) or isExternal.toFlag(IS_EXTERNAL_BIT) or isStatic.toFlag(IS_STATIC_BIT)).toByte()
override val factory: IrFactory
get() = IrFactoryImpl
override val isFinal: Boolean
- get() = flags.getFlag(IrFlags.IS_FINAL)
+ get() = flags.toInt().getFlag(IS_FINAL_BIT)
override val isExternal: Boolean
- get() = flags.getFlag(IrFlags.IS_EXTERNAL)
+ get() = flags.toInt().getFlag(IS_EXTERNAL_BIT)
override val isStatic: Boolean
- get() = flags.getFlag(IrFlags.IS_STATIC)
+ get() = flags.toInt().getFlag(IS_STATIC_BIT)
override lateinit var parent: IrDeclarationParent
override var annotations: List<IrConstructorCall> = emptyList()
@@ -72,4 +71,10 @@
override var correspondingPropertySymbol: IrPropertySymbol? = null
override var metadata: MetadataSource? = null
+
+ private companion object {
+ const val IS_FINAL_BIT = 1 shl 0
+ const val IS_EXTERNAL_BIT = 1 shl 1
+ const val IS_STATIC_BIT = 1 shl 2
+ }
}
diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt
index 1da663a..9d0a522f8 100644
--- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt
+++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt
@@ -28,7 +28,7 @@
override val name: Name,
override var visibility: DescriptorVisibility,
returnType: IrType,
- protected var flags: Int,
+ protected var flags: Short,
override val containerSource: DeserializedContainerSource?,
) : IrSimpleFunction() {
override val factory: IrFactory
@@ -45,31 +45,31 @@
}
override var modality: Modality
- get() = flags.toModality()
+ get() = flags.toInt().toModality()
set(value) {
- flags = flags.setModality(value)
+ flags = flags.toInt().setModality(value).toShort()
}
override val isInline
- get() = flags.getFlag(IrFlags.IS_INLINE)
+ get() = flags.toInt().getFlag(IS_INLINE_BIT)
override val isExternal
- get() = flags.getFlag(IrFlags.IS_EXTERNAL)
+ get() = flags.toInt().getFlag(IS_EXTERNAL_BIT)
override val isTailrec
- get() = flags.getFlag(IrFlags.IS_TAILREC)
+ get() = flags.toInt().getFlag(IS_TAILREC_BIT)
override val isSuspend
- get() = flags.getFlag(IrFlags.IS_SUSPEND)
+ get() = flags.toInt().getFlag(IS_SUSPEND_BIT)
override val isOperator
- get() = flags.getFlag(IrFlags.IS_OPERATOR)
+ get() = flags.toInt().getFlag(IS_OPERATOR_BIT)
override val isInfix
- get() = flags.getFlag(IrFlags.IS_INFIX)
+ get() = flags.toInt().getFlag(IS_INFIX_BIT)
override val isExpect
- get() = flags.getFlag(IrFlags.IS_EXPECT)
+ get() = flags.toInt().getFlag(IS_EXPECT_BIT)
override var typeParameters: List<IrTypeParameter> = emptyList()
@@ -87,6 +87,17 @@
override var attributeOwnerId: IrAttributeContainer = this
override var correspondingPropertySymbol: IrPropertySymbol? = null
+
+ protected companion object {
+ const val IS_INLINE_BIT = 1 shl (IrFlags.MODALITY_BITS + 0)
+ const val IS_EXTERNAL_BIT = 1 shl (IrFlags.MODALITY_BITS + 1)
+ const val IS_TAILREC_BIT = 1 shl (IrFlags.MODALITY_BITS + 2)
+ const val IS_SUSPEND_BIT = 1 shl (IrFlags.MODALITY_BITS + 3)
+ const val IS_OPERATOR_BIT = 1 shl (IrFlags.MODALITY_BITS + 4)
+ const val IS_INFIX_BIT = 1 shl (IrFlags.MODALITY_BITS + 5)
+ const val IS_EXPECT_BIT = 1 shl (IrFlags.MODALITY_BITS + 6)
+ const val IS_FAKE_OVERRIDE_BIT = 1 shl (IrFlags.MODALITY_BITS + 7)
+ }
}
class IrFunctionImpl(
@@ -105,19 +116,22 @@
isOperator: Boolean,
isInfix: Boolean,
isExpect: Boolean,
- override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
+ isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
containerSource: DeserializedContainerSource? = null,
) : IrFunctionCommonImpl(
startOffset, endOffset, origin, name, visibility, returnType,
- modality.toFlags() or isInline.toFlag(IrFlags.IS_INLINE) or isExternal.toFlag(IrFlags.IS_EXTERNAL) or
- isTailrec.toFlag(IrFlags.IS_TAILREC) or isSuspend.toFlag(IrFlags.IS_SUSPEND) or isOperator.toFlag(IrFlags.IS_OPERATOR) or
- isInfix.toFlag(IrFlags.IS_INFIX) or isExpect.toFlag(IrFlags.IS_EXPECT),
+ (modality.toFlags() or isInline.toFlag(IS_INLINE_BIT) or isExternal.toFlag(IS_EXTERNAL_BIT) or
+ isTailrec.toFlag(IS_TAILREC_BIT) or isSuspend.toFlag(IS_SUSPEND_BIT) or isOperator.toFlag(IS_OPERATOR_BIT) or
+ isInfix.toFlag(IS_INFIX_BIT) or isExpect.toFlag(IS_EXPECT_BIT) or isFakeOverride.toFlag(IS_FAKE_OVERRIDE_BIT)).toShort(),
containerSource,
) {
@ObsoleteDescriptorBasedAPI
override val descriptor: FunctionDescriptor
get() = symbol.descriptor
+ override val isFakeOverride: Boolean
+ get() = flags.toInt().getFlag(IS_FAKE_OVERRIDE_BIT)
+
init {
symbol.bind(this)
}
@@ -140,9 +154,9 @@
isExpect: Boolean,
) : IrFunctionCommonImpl(
startOffset, endOffset, origin, name, visibility, returnType,
- modality.toFlags() or isInline.toFlag(IrFlags.IS_INLINE) or isExternal.toFlag(IrFlags.IS_EXTERNAL) or
- isTailrec.toFlag(IrFlags.IS_TAILREC) or isSuspend.toFlag(IrFlags.IS_SUSPEND) or isOperator.toFlag(IrFlags.IS_OPERATOR) or
- isInfix.toFlag(IrFlags.IS_INFIX) or isExpect.toFlag(IrFlags.IS_EXPECT),
+ (modality.toFlags() or isInline.toFlag(IS_INLINE_BIT) or isExternal.toFlag(IS_EXTERNAL_BIT) or
+ isTailrec.toFlag(IS_TAILREC_BIT) or isSuspend.toFlag(IS_SUSPEND_BIT) or isOperator.toFlag(IS_OPERATOR_BIT) or
+ isInfix.toFlag(IS_INFIX_BIT) or isExpect.toFlag(IS_EXPECT_BIT)).toShort(),
containerSource = null,
), IrFakeOverrideFunction {
override val isFakeOverride: Boolean
diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt
index 31b0e53..2ddbb58 100644
--- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt
+++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt
@@ -33,35 +33,35 @@
override var origin: IrDeclarationOrigin,
override val name: Name,
override var visibility: DescriptorVisibility,
- protected var flags: Int,
+ protected var flags: Short,
override val containerSource: DeserializedContainerSource?,
) : IrProperty() {
override val factory: IrFactory
get() = IrFactoryImpl
override var modality: Modality
- get() = flags.toModality()
+ get() = flags.toInt().toModality()
set(value) {
- flags = flags.setModality(value)
+ flags = flags.toInt().setModality(value).toShort()
}
override val isVar: Boolean
- get() = flags.getFlag(IrFlags.IS_VAR)
+ get() = flags.toInt().getFlag(IS_VAR_BIT)
override val isConst: Boolean
- get() = flags.getFlag(IrFlags.IS_CONST)
+ get() = flags.toInt().getFlag(IS_CONST_BIT)
override val isLateinit: Boolean
- get() = flags.getFlag(IrFlags.IS_LATEINIT)
+ get() = flags.toInt().getFlag(IS_LATEINIT_BIT)
override val isDelegated: Boolean
- get() = flags.getFlag(IrFlags.IS_DELEGATED)
+ get() = flags.toInt().getFlag(IS_DELEGATED_BIT)
override val isExternal: Boolean
- get() = flags.getFlag(IrFlags.IS_EXTERNAL)
+ get() = flags.toInt().getFlag(IS_EXTERNAL_BIT)
override val isExpect: Boolean
- get() = flags.getFlag(IrFlags.IS_EXPECT)
+ get() = flags.toInt().getFlag(IS_EXPECT_BIT)
override lateinit var parent: IrDeclarationParent
override var annotations: List<IrConstructorCall> = emptyList()
@@ -75,6 +75,16 @@
override var metadata: MetadataSource? = null
override var attributeOwnerId: IrAttributeContainer = this
+
+ protected companion object {
+ const val IS_VAR_BIT = 1 shl (IrFlags.MODALITY_BITS + 0)
+ const val IS_CONST_BIT = 1 shl (IrFlags.MODALITY_BITS + 1)
+ const val IS_LATEINIT_BIT = 1 shl (IrFlags.MODALITY_BITS + 2)
+ const val IS_DELEGATED_BIT = 1 shl (IrFlags.MODALITY_BITS + 3)
+ const val IS_EXTERNAL_BIT = 1 shl (IrFlags.MODALITY_BITS + 4)
+ const val IS_EXPECT_BIT = 1 shl (IrFlags.MODALITY_BITS + 5)
+ const val IS_FAKE_OVERRIDE_BIT = 1 shl (IrFlags.MODALITY_BITS + 6)
+ }
}
class IrPropertyImpl(
@@ -95,10 +105,10 @@
containerSource: DeserializedContainerSource? = null,
) : IrPropertyCommonImpl(
startOffset, endOffset, origin, name, visibility,
- modality.toFlags() or
- isVar.toFlag(IrFlags.IS_VAR) or isConst.toFlag(IrFlags.IS_CONST) or isLateinit.toFlag(IrFlags.IS_LATEINIT) or
- isDelegated.toFlag(IrFlags.IS_DELEGATED) or isExternal.toFlag(IrFlags.IS_EXTERNAL) or isExpect.toFlag(IrFlags.IS_EXPECT) or
- isFakeOverride.toFlag(IrFlags.IS_FAKE_OVERRIDE),
+ (modality.toFlags() or
+ isVar.toFlag(IS_VAR_BIT) or isConst.toFlag(IS_CONST_BIT) or isLateinit.toFlag(IS_LATEINIT_BIT) or
+ isDelegated.toFlag(IS_DELEGATED_BIT) or isExternal.toFlag(IS_EXTERNAL_BIT) or isExpect.toFlag(IS_EXPECT_BIT) or
+ isFakeOverride.toFlag(IS_FAKE_OVERRIDE_BIT)).toShort(),
containerSource
) {
init {
@@ -106,7 +116,7 @@
}
override val isFakeOverride: Boolean
- get() = flags.getFlag(IrFlags.IS_FAKE_OVERRIDE)
+ get() = flags.toInt().getFlag(IS_FAKE_OVERRIDE_BIT)
@ObsoleteDescriptorBasedAPI
override val descriptor: PropertyDescriptor
@@ -128,9 +138,9 @@
isExpect: Boolean,
) : IrPropertyCommonImpl(
startOffset, endOffset, origin, name, visibility,
- modality.toFlags() or
- isVar.toFlag(IrFlags.IS_VAR) or isConst.toFlag(IrFlags.IS_CONST) or isLateinit.toFlag(IrFlags.IS_LATEINIT) or
- isDelegated.toFlag(IrFlags.IS_DELEGATED) or isExternal.toFlag(IrFlags.IS_EXTERNAL) or isExpect.toFlag(IrFlags.IS_EXPECT),
+ (modality.toFlags() or
+ isVar.toFlag(IS_VAR_BIT) or isConst.toFlag(IS_CONST_BIT) or isLateinit.toFlag(IS_LATEINIT_BIT) or
+ isDelegated.toFlag(IS_DELEGATED_BIT) or isExternal.toFlag(IS_EXTERNAL_BIT) or isExpect.toFlag(IS_EXPECT_BIT)).toShort(),
containerSource = null,
), IrFakeOverrideProperty {
override val isFakeOverride: Boolean
diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt
index 85f29e4..664995d 100644
--- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt
+++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
-import org.jetbrains.kotlin.ir.IrFlags
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
@@ -53,20 +52,20 @@
symbol.bind(this)
}
- private val flags = isCrossinline.toFlag(IrFlags.IS_CROSSINLINE) or isNoinline.toFlag(IrFlags.IS_NOINLINE) or
- isHidden.toFlag(IrFlags.IS_HIDDEN) or isAssignable.toFlag(IrFlags.IS_ASSIGNABLE)
+ private val flags = (isCrossinline.toFlag(IS_CROSSINLINE_BIT) or isNoinline.toFlag(IS_NOINLINE_BIT) or
+ isHidden.toFlag(IS_HIDDEN_BIT) or isAssignable.toFlag(IS_ASSIGNABLE_BIT)).toByte()
override val isCrossinline: Boolean
- get() = flags.getFlag(IrFlags.IS_CROSSINLINE)
+ get() = flags.toInt().getFlag(IS_CROSSINLINE_BIT)
override val isNoinline: Boolean
- get() = flags.getFlag(IrFlags.IS_NOINLINE)
+ get() = flags.toInt().getFlag(IS_NOINLINE_BIT)
override val isHidden: Boolean
- get() = flags.getFlag(IrFlags.IS_HIDDEN)
+ get() = flags.toInt().getFlag(IS_HIDDEN_BIT)
override val isAssignable: Boolean
- get() = flags.getFlag(IrFlags.IS_ASSIGNABLE)
+ get() = flags.toInt().getFlag(IS_ASSIGNABLE_BIT)
override val factory: IrFactory
get() = IrFactoryImpl
@@ -75,4 +74,11 @@
override var annotations: List<IrConstructorCall> = emptyList()
override var defaultValue: IrExpressionBody? = null
+
+ private companion object {
+ const val IS_CROSSINLINE_BIT = 1 shl 0
+ const val IS_NOINLINE_BIT = 1 shl 1
+ const val IS_HIDDEN_BIT = 1 shl 2
+ const val IS_ASSIGNABLE_BIT = 1 shl 3
+ }
}
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt
index 48e372e..2ce1c4f 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrVariableImpl.kt
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.VariableDescriptor
-import org.jetbrains.kotlin.ir.IrFlags
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
@@ -58,16 +57,16 @@
symbol.bind(this)
}
- private val flags = isVar.toFlag(IrFlags.IS_VAR) or isConst.toFlag(IrFlags.IS_CONST) or isLateinit.toFlag(IrFlags.IS_LATEINIT)
+ private val flags = (isVar.toFlag(IS_VAR_BIT) or isConst.toFlag(IS_CONST_BIT) or isLateinit.toFlag(IS_LATEINIT_BIT)).toByte()
override val isVar: Boolean
- get() = flags.getFlag(IrFlags.IS_VAR)
+ get() = flags.toInt().getFlag(IS_VAR_BIT)
override val isConst: Boolean
- get() = flags.getFlag(IrFlags.IS_CONST)
+ get() = flags.toInt().getFlag(IS_CONST_BIT)
override val isLateinit: Boolean
- get() = flags.getFlag(IrFlags.IS_LATEINIT)
+ get() = flags.toInt().getFlag(IS_LATEINIT_BIT)
@ObsoleteDescriptorBasedAPI
override val descriptor: VariableDescriptor
@@ -94,4 +93,10 @@
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
initializer = initializer?.transform(transformer, data)
}
+
+ private companion object {
+ const val IS_VAR_BIT = 1 shl 0
+ const val IS_CONST_BIT = 1 shl 1
+ const val IS_LATEINIT_BIT = 1 shl 2
+ }
}
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/flags.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/flags.kt
index 426126a..1b3fd7e 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/flags.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/flags.kt
@@ -10,39 +10,13 @@
/* Flag values for IrDeclaration.flags */
object IrFlags {
const val MODALITY_MASK = 0x00000003
+
const val MODALITY_FINAL = 0x0
const val MODALITY_SEALED = 0x1
const val MODALITY_OPEN = 0x2
const val MODALITY_ABSTRACT = 0x3
- const val IS_INLINE = 0x00000004
- const val IS_EXTERNAL = 0x00000008
- const val IS_TAILREC = 0x00000010
- const val IS_SUSPEND = 0x00000020
- const val IS_OPERATOR = 0x00000040
- const val IS_INFIX = 0x00000080
- const val IS_EXPECT = 0x00000100
-
- const val IS_PRIMARY = 0x00000200
-
- const val IS_VAR = 0x00000400
- const val IS_CONST = 0x00000800
- const val IS_LATEINIT = 0x00001000
- const val IS_DELEGATED = 0x00002000
- const val IS_FAKE_OVERRIDE = 0x00004000
-
- const val IS_COMPANION = 0x00008000
- const val IS_INNER = 0x00010000
- const val IS_DATA = 0x00020000
- const val IS_FUN = 0x00040000
-
- const val IS_FINAL = 0x00080000
- const val IS_STATIC = 0x00100000
-
- const val IS_CROSSINLINE = 0x00200000
- const val IS_NOINLINE = 0x00400000
- const val IS_HIDDEN = 0x00800000
- const val IS_ASSIGNABLE = 0x01000000
+ const val MODALITY_BITS = 2
}
fun Modality.toFlags() = when (this) {