[IR] simplify Carriers (remove type parameters)

This commit is contained in:
Anton Bannykh
2020-03-04 12:07:43 +03:00
committed by Anton Bannykh
parent adf5ee394e
commit 916a5f367c
19 changed files with 29 additions and 39 deletions
@@ -386,11 +386,9 @@ fun usefulDeclarations(roots: Iterable<IrDeclaration>, context: JsIrBackendConte
) { ) {
declaration.enqueue(klass, "annotated by @JsName") declaration.enqueue(klass, "annotated by @JsName")
} }
}
// TODO is this needed? // A hack to enforce property lowering.
for (declaration in ArrayList(klass.declarations)) { // Until a getter is accessed it doesn't get moved to the declaration list.
// TODO this is a hack.
if (declaration is IrProperty) { if (declaration is IrProperty) {
fun IrSimpleFunction.enqueue(description: String) { fun IrSimpleFunction.enqueue(description: String) {
findOverriddenContagiousDeclaration()?.let { enqueue(it, description) } findOverriddenContagiousDeclaration()?.let { enqueue(it, description) }
@@ -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.IrBody
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
abstract class IrDeclarationBase<T : DeclarationCarrier<T>>( abstract class IrDeclarationBase<T : DeclarationCarrier>(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin origin: IrDeclarationOrigin
) : IrPersistingElementBase<T>(startOffset, endOffset), ) : IrPersistingElementBase<T>(startOffset, endOffset),
IrDeclaration, IrDeclaration,
DeclarationCarrier<T> { DeclarationCarrier {
override var parentField: IrDeclarationParent? = null override var parentField: IrDeclarationParent? = null
@@ -75,18 +75,18 @@ abstract class IrDeclarationBase<T : DeclarationCarrier<T>>(
} }
} }
abstract class IrPersistingElementBase<T : Carrier<T>>( abstract class IrPersistingElementBase<T : Carrier>(
startOffset: Int, startOffset: Int,
endOffset: Int endOffset: Int
) : IrElementBase(startOffset, endOffset), ) : IrElementBase(startOffset, endOffset),
Carrier<T> { Carrier {
override var lastModified: Int = stageController.currentStage override var lastModified: Int = stageController.currentStage
var loweredUpTo = stageController.currentStage var loweredUpTo = stageController.currentStage
// TODO Array<T>? // TODO Array<T>?
private var values: Array<Any?>? = null private var values: Array<Carrier>? = null
val createdOn: Int = stageController.currentStage val createdOn: Int = stageController.currentStage
// get() = values?.let { (it[0] as T).lastModified } ?: lastModified // get() = values?.let { (it[0] as T).lastModified } ?: lastModified
@@ -140,13 +140,7 @@ abstract class IrPersistingElementBase<T : Carrier<T>>(
if (stage == lastModified) { if (stage == lastModified) {
return this as T return this as T
} else { } else {
val newValues = values?.let { oldValues -> values = (values ?: emptyArray()) + this.clone() as T
oldValues.copyOf(oldValues.size + 1)
} ?: arrayOfNulls<Any?>(1)
newValues[newValues.size - 1] = this.clone()
values = newValues
} }
this.lastModified = stage this.lastModified = stage
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
abstract class IrFunctionBase<T : FunctionBaseCarrier<T>>( abstract class IrFunctionBase<T : FunctionBaseCarrier>(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
@@ -40,7 +40,7 @@ abstract class IrFunctionBase<T : FunctionBaseCarrier<T>>(
) : ) :
IrDeclarationBase<T>(startOffset, endOffset, origin), IrDeclarationBase<T>(startOffset, endOffset, origin),
IrFunction, IrFunction,
FunctionBaseCarrier<T> { FunctionBaseCarrier {
override var returnTypeFieldField: IrType = returnType override var returnTypeFieldField: IrType = returnType
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
interface AnonymousInitializerCarrier : DeclarationCarrier<AnonymousInitializerCarrier> { interface AnonymousInitializerCarrier : DeclarationCarrier {
var bodyField: IrBlockBody? var bodyField: IrBlockBody?
override fun clone(): AnonymousInitializerCarrier { override fun clone(): AnonymousInitializerCarrier {
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.ir.declarations.impl.carriers
import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclaration
interface BodyCarrier : Carrier<BodyCarrier> { interface BodyCarrier : Carrier {
var containerField: IrDeclaration? var containerField: IrDeclaration?
@@ -5,10 +5,8 @@
package org.jetbrains.kotlin.ir.declarations.impl.carriers package org.jetbrains.kotlin.ir.declarations.impl.carriers
// TODO degenerify interface Carrier {
// TODO degenerify
interface Carrier<in T : Carrier<T>> {
val lastModified: Int val lastModified: Int
fun clone(): Carrier<T> fun clone(): Carrier
} }
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
interface ClassCarrier : DeclarationCarrier<ClassCarrier> { interface ClassCarrier : DeclarationCarrier {
var thisReceiverField: IrValueParameter? var thisReceiverField: IrValueParameter?
var metadataField: MetadataSource? var metadataField: MetadataSource?
var visibilityField: Visibility var visibilityField: Visibility
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
interface ConstructorCarrier : FunctionBaseCarrier<ConstructorCarrier> { interface ConstructorCarrier : FunctionBaseCarrier {
override fun clone(): ConstructorCarrier { override fun clone(): ConstructorCarrier {
return ConstructorCarrierImpl( return ConstructorCarrierImpl(
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
interface DeclarationCarrier<in T : DeclarationCarrier<T>>: Carrier<T> { interface DeclarationCarrier: Carrier {
var parentField: IrDeclarationParent? var parentField: IrDeclarationParent?
var originField: IrDeclarationOrigin var originField: IrDeclarationOrigin
var annotationsField: List<IrConstructorCall> var annotationsField: List<IrConstructorCall>
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
interface EnumEntryCarrier : DeclarationCarrier<EnumEntryCarrier> { interface EnumEntryCarrier : DeclarationCarrier {
var correspondingClassField: IrClass? var correspondingClassField: IrClass?
var initializerExpressionField: IrExpressionBody? var initializerExpressionField: IrExpressionBody?
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
interface ErrorCarrier : DeclarationCarrier<ErrorCarrier> { interface ErrorCarrier : DeclarationCarrier {
override fun clone(): ErrorCarrier { override fun clone(): ErrorCarrier {
return ErrorCarrierImpl(lastModified, parentField, originField, annotationsField) return ErrorCarrierImpl(lastModified, parentField, originField, annotationsField)
@@ -21,4 +21,4 @@ class ErrorCarrierImpl(
override var parentField: IrDeclarationParent?, override var parentField: IrDeclarationParent?,
override var originField: IrDeclarationOrigin, override var originField: IrDeclarationOrigin,
override var annotationsField: List<IrConstructorCall> override var annotationsField: List<IrConstructorCall>
) : ErrorCarrier ) : ErrorCarrier
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
interface FieldCarrier : DeclarationCarrier<FieldCarrier> { interface FieldCarrier : DeclarationCarrier {
var initializerField: IrExpressionBody? var initializerField: IrExpressionBody?
var correspondingPropertySymbolField: IrPropertySymbol? var correspondingPropertySymbolField: IrPropertySymbol?
var metadataField: MetadataSource? var metadataField: MetadataSource?
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.declarations.MetadataSource
import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
interface FunctionBaseCarrier<T : FunctionBaseCarrier<T>> : DeclarationCarrier<T> { interface FunctionBaseCarrier : DeclarationCarrier {
var returnTypeFieldField: IrType var returnTypeFieldField: IrType
var dispatchReceiverParameterField: IrValueParameter? var dispatchReceiverParameterField: IrValueParameter?
var extensionReceiverParameterField: IrValueParameter? var extensionReceiverParameterField: IrValueParameter?
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
interface FunctionCarrier : FunctionBaseCarrier<FunctionCarrier> { interface FunctionCarrier : FunctionBaseCarrier {
var correspondingPropertySymbolField: IrPropertySymbol? var correspondingPropertySymbolField: IrPropertySymbol?
var overriddenSymbolsField: List<IrSimpleFunctionSymbol> var overriddenSymbolsField: List<IrSimpleFunctionSymbol>
var attributeOwnerIdField: IrAttributeContainer var attributeOwnerIdField: IrAttributeContainer
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl.carriers
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
interface LocalDelegatedPropertyCarrier : DeclarationCarrier<LocalDelegatedPropertyCarrier> { interface LocalDelegatedPropertyCarrier : DeclarationCarrier {
var delegateField: IrVariable? var delegateField: IrVariable?
var getterField: IrFunction? var getterField: IrFunction?
var setterField: IrFunction? var setterField: IrFunction?
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.impl.carriers
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
interface PropertyCarrier : DeclarationCarrier<PropertyCarrier> { interface PropertyCarrier : DeclarationCarrier {
var backingFieldField: IrField? var backingFieldField: IrField?
var getterField: IrSimpleFunction? var getterField: IrSimpleFunction?
var setterField: IrSimpleFunction? var setterField: IrSimpleFunction?
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
interface TypeAliasCarrier : DeclarationCarrier<TypeAliasCarrier> { interface TypeAliasCarrier : DeclarationCarrier {
var typeParametersField: List<IrTypeParameter> var typeParametersField: List<IrTypeParameter>
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
interface TypeParameterCarrier : DeclarationCarrier<TypeParameterCarrier> { interface TypeParameterCarrier : DeclarationCarrier {
override fun clone(): TypeParameterCarrier { override fun clone(): TypeParameterCarrier {
return TypeParameterCarrierImpl(lastModified, parentField, originField, annotationsField) return TypeParameterCarrierImpl(lastModified, parentField, originField, annotationsField)
@@ -21,4 +21,4 @@ class TypeParameterCarrierImpl(
override var parentField: IrDeclarationParent?, override var parentField: IrDeclarationParent?,
override var originField: IrDeclarationOrigin, override var originField: IrDeclarationOrigin,
override var annotationsField: List<IrConstructorCall> override var annotationsField: List<IrConstructorCall>
) : TypeParameterCarrier ) : TypeParameterCarrier
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
interface ValueParameterCarrier : DeclarationCarrier<ValueParameterCarrier> { interface ValueParameterCarrier : DeclarationCarrier {
var defaultValueField: IrExpressionBody? var defaultValueField: IrExpressionBody?
override fun clone(): ValueParameterCarrier { override fun clone(): ValueParameterCarrier {