diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt index d45fd5eae00..c297a81ed8f 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/Dce.kt @@ -386,11 +386,9 @@ fun usefulDeclarations(roots: Iterable, context: JsIrBackendConte ) { declaration.enqueue(klass, "annotated by @JsName") } - } - // TODO is this needed? - for (declaration in ArrayList(klass.declarations)) { - // TODO this is a hack. + // A hack to enforce property lowering. + // Until a getter is accessed it doesn't get moved to the declaration list. if (declaration is IrProperty) { fun IrSimpleFunction.enqueue(description: String) { findOverriddenContagiousDeclaration()?.let { enqueue(it, description) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt index 87b8444031b..54e6839f1ae 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrDeclarationBase.kt @@ -24,13 +24,13 @@ import org.jetbrains.kotlin.ir.declarations.impl.carriers.DeclarationCarrier import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -abstract class IrDeclarationBase>( +abstract class IrDeclarationBase( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin ) : IrPersistingElementBase(startOffset, endOffset), IrDeclaration, - DeclarationCarrier { + DeclarationCarrier { override var parentField: IrDeclarationParent? = null @@ -75,18 +75,18 @@ abstract class IrDeclarationBase>( } } -abstract class IrPersistingElementBase>( +abstract class IrPersistingElementBase( startOffset: Int, endOffset: Int ) : IrElementBase(startOffset, endOffset), - Carrier { + Carrier { override var lastModified: Int = stageController.currentStage var loweredUpTo = stageController.currentStage // TODO Array? - private var values: Array? = null + private var values: Array? = null val createdOn: Int = stageController.currentStage // get() = values?.let { (it[0] as T).lastModified } ?: lastModified @@ -140,13 +140,7 @@ abstract class IrPersistingElementBase>( if (stage == lastModified) { return this as T } else { - val newValues = values?.let { oldValues -> - oldValues.copyOf(oldValues.size + 1) - } ?: arrayOfNulls(1) - - newValues[newValues.size - 1] = this.clone() - - values = newValues + values = (values ?: emptyArray()) + this.clone() as T } this.lastModified = stage diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt index 582d6171d8d..87a67ac8f63 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionBase.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name -abstract class IrFunctionBase>( +abstract class IrFunctionBase( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, @@ -40,7 +40,7 @@ abstract class IrFunctionBase>( ) : IrDeclarationBase(startOffset, endOffset, origin), IrFunction, - FunctionBaseCarrier { + FunctionBaseCarrier { override var returnTypeFieldField: IrType = returnType diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/AnonymousInitializerCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/AnonymousInitializerCarrier.kt index c52abc28a7b..9f88a1f6b33 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/AnonymousInitializerCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/AnonymousInitializerCarrier.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -interface AnonymousInitializerCarrier : DeclarationCarrier { +interface AnonymousInitializerCarrier : DeclarationCarrier { var bodyField: IrBlockBody? override fun clone(): AnonymousInitializerCarrier { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/BodyCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/BodyCarrier.kt index 35db7980e7b..982b7feac2c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/BodyCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/BodyCarrier.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.impl.carriers import org.jetbrains.kotlin.ir.declarations.IrDeclaration -interface BodyCarrier : Carrier { +interface BodyCarrier : Carrier { var containerField: IrDeclaration? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/Carrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/Carrier.kt index 4e2457f5e34..edb9ae1e3fa 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/Carrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/Carrier.kt @@ -5,10 +5,8 @@ package org.jetbrains.kotlin.ir.declarations.impl.carriers -// TODO degenerify -// TODO degenerify -interface Carrier> { +interface Carrier { val lastModified: Int - fun clone(): Carrier + fun clone(): Carrier } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ClassCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ClassCarrier.kt index 0d207507375..f6180fe5eff 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ClassCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ClassCarrier.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.types.IrType -interface ClassCarrier : DeclarationCarrier { +interface ClassCarrier : DeclarationCarrier { var thisReceiverField: IrValueParameter? var metadataField: MetadataSource? var visibilityField: Visibility diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ConstructorCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ConstructorCarrier.kt index be3e90e62d0..bd2d8dc92c7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ConstructorCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ConstructorCarrier.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.types.IrType -interface ConstructorCarrier : FunctionBaseCarrier { +interface ConstructorCarrier : FunctionBaseCarrier { override fun clone(): ConstructorCarrier { return ConstructorCarrierImpl( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/DeclarationCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/DeclarationCarrier.kt index 5ce03a72e62..0b0572c1e70 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/DeclarationCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/DeclarationCarrier.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.utils.SmartList -interface DeclarationCarrier>: Carrier { +interface DeclarationCarrier: Carrier { var parentField: IrDeclarationParent? var originField: IrDeclarationOrigin var annotationsField: List diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/EnumEntryCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/EnumEntryCarrier.kt index bb80b57fec2..0427cec6df2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/EnumEntryCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/EnumEntryCarrier.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody -interface EnumEntryCarrier : DeclarationCarrier { +interface EnumEntryCarrier : DeclarationCarrier { var correspondingClassField: IrClass? var initializerExpressionField: IrExpressionBody? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ErrorCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ErrorCarrier.kt index da83f7f4a20..60abf70ccb9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ErrorCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ErrorCarrier.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -interface ErrorCarrier : DeclarationCarrier { +interface ErrorCarrier : DeclarationCarrier { override fun clone(): ErrorCarrier { return ErrorCarrierImpl(lastModified, parentField, originField, annotationsField) @@ -21,4 +21,4 @@ class ErrorCarrierImpl( override var parentField: IrDeclarationParent?, override var originField: IrDeclarationOrigin, override var annotationsField: List - ) : ErrorCarrier \ No newline at end of file +) : ErrorCarrier \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt index 11cecb953da..4e96e56acd7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FieldCarrier.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol -interface FieldCarrier : DeclarationCarrier { +interface FieldCarrier : DeclarationCarrier { var initializerField: IrExpressionBody? var correspondingPropertySymbolField: IrPropertySymbol? var metadataField: MetadataSource? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionBaseCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionBaseCarrier.kt index e403b39a368..7a1e407750e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionBaseCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionBaseCarrier.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.types.IrType -interface FunctionBaseCarrier> : DeclarationCarrier { +interface FunctionBaseCarrier : DeclarationCarrier { var returnTypeFieldField: IrType var dispatchReceiverParameterField: IrValueParameter? var extensionReceiverParameterField: IrValueParameter? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionCarrier.kt index c3e3bdd5185..9c7de052ebf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/FunctionCarrier.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType -interface FunctionCarrier : FunctionBaseCarrier { +interface FunctionCarrier : FunctionBaseCarrier { var correspondingPropertySymbolField: IrPropertySymbol? var overriddenSymbolsField: List var attributeOwnerIdField: IrAttributeContainer diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt index 403c74fe9d2..433963bca73 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/LocalDelegatedPropertyCarrier.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl.carriers import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -interface LocalDelegatedPropertyCarrier : DeclarationCarrier { +interface LocalDelegatedPropertyCarrier : DeclarationCarrier { var delegateField: IrVariable? var getterField: IrFunction? var setterField: IrFunction? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/PropertyCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/PropertyCarrier.kt index a1c6038041e..16a70cd2658 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/PropertyCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/PropertyCarrier.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl.carriers import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -interface PropertyCarrier : DeclarationCarrier { +interface PropertyCarrier : DeclarationCarrier { var backingFieldField: IrField? var getterField: IrSimpleFunction? var setterField: IrSimpleFunction? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeAliasCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeAliasCarrier.kt index ababb4d4208..3d88c2c69c2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeAliasCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeAliasCarrier.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -interface TypeAliasCarrier : DeclarationCarrier { +interface TypeAliasCarrier : DeclarationCarrier { var typeParametersField: List diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeParameterCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeParameterCarrier.kt index ddadbcb8562..0dcf801a759 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeParameterCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/TypeParameterCarrier.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrConstructorCall -interface TypeParameterCarrier : DeclarationCarrier { +interface TypeParameterCarrier : DeclarationCarrier { override fun clone(): TypeParameterCarrier { return TypeParameterCarrierImpl(lastModified, parentField, originField, annotationsField) @@ -21,4 +21,4 @@ class TypeParameterCarrierImpl( override var parentField: IrDeclarationParent?, override var originField: IrDeclarationOrigin, override var annotationsField: List - ) : TypeParameterCarrier \ No newline at end of file +) : TypeParameterCarrier \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ValueParameterCarrier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ValueParameterCarrier.kt index 697a91a6fc2..6024e3c01ee 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ValueParameterCarrier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/carriers/ValueParameterCarrier.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody -interface ValueParameterCarrier : DeclarationCarrier { +interface ValueParameterCarrier : DeclarationCarrier { var defaultValueField: IrExpressionBody? override fun clone(): ValueParameterCarrier {