IR: remove IrSymbolDeclaration

This commit is contained in:
Georgy Bronnikov
2020-12-06 15:58:51 +03:00
parent d714adacae
commit b05400154d
19 changed files with 38 additions and 42 deletions
@@ -35,13 +35,13 @@ import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.descriptors.WrappedReceiverParameterDescriptor
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl
import org.jetbrains.kotlin.ir.util.SymbolTable
@@ -331,22 +331,15 @@ internal fun IrDeclarationParent.declareThisReceiverParameter(
thisOrigin: IrDeclarationOrigin,
startOffset: Int = this.startOffset,
endOffset: Int = this.endOffset
): IrValueParameter {
val receiverDescriptor = WrappedReceiverParameterDescriptor()
return symbolTable.declareValueParameter(
startOffset, endOffset, thisOrigin, receiverDescriptor, thisType
) { symbol ->
symbolTable.irFactory.createValueParameter(
startOffset, endOffset, thisOrigin, symbol,
Name.special("<this>"), UNDEFINED_PARAMETER_INDEX, thisType,
varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
).apply {
this.parent = this@declareThisReceiverParameter
receiverDescriptor.bind(this)
}
): IrValueParameter =
symbolTable.irFactory.createValueParameter(
startOffset, endOffset, thisOrigin, IrValueParameterSymbolImpl(),
Name.special("<this>"), UNDEFINED_PARAMETER_INDEX, thisType,
varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
).apply {
this.parent = this@declareThisReceiverParameter
}
}
fun FirClass<*>.irOrigin(firProvider: FirProvider): IrDeclarationOrigin = when {
firProvider.getFirClassifierContainerFileIfAny(symbol) != null -> IrDeclarationOrigin.DEFINED
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.ir.builders.irCall
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrSymbolDeclaration
import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
@@ -23,7 +22,7 @@ class KotlinNothingValueExceptionLowering(
) : BodyLoweringPass {
override fun lower(irBody: IrBody, container: IrDeclaration) {
if (!skip(container)) {
irBody.transformChildrenVoid(Transformer((container as IrSymbolDeclaration<*>).symbol))
irBody.transformChildrenVoid(Transformer(container.symbol))
}
}
@@ -121,10 +121,6 @@ private class StringConcatenationTransformer(val lower: StringConcatenationLower
}
override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement {
if (declaration !is IrSymbolDeclaration<*>) {
return super.visitDeclaration(declaration)
}
with(declaration) {
buildersStack.add(
context.createIrBuilder(declaration.symbol, startOffset, endOffset)
@@ -23,9 +23,10 @@ import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrAnonymousInitializer : IrDeclarationBase(), IrSymbolDeclaration<IrAnonymousInitializerSymbol> {
abstract class IrAnonymousInitializer : IrDeclarationBase() {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: ClassDescriptor // TODO special descriptor for anonymous initializer blocks
abstract override val symbol: IrAnonymousInitializerSymbol
abstract val isStatic: Boolean
@@ -29,11 +29,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrClass :
IrDeclarationBase(), IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithName, IrDeclarationWithVisibility,
IrDeclarationBase(), IrDeclarationWithName, IrDeclarationWithVisibility,
IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: ClassDescriptor
abstract override val symbol: IrClassSymbol
abstract val kind: ClassKind
abstract var modality: Modality
@@ -21,9 +21,10 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrConstructor : IrFunction(), IrSymbolDeclaration<IrConstructorSymbol> {
abstract class IrConstructor : IrFunction() {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: ClassConstructorDescriptor
abstract override val symbol: IrConstructorSymbol
abstract val isPrimary: Boolean
@@ -48,10 +48,6 @@ interface IrDeclaration : IrStatement, IrSymbolOwner, IrMutableAnnotationContain
abstract class IrDeclarationBase : IrElementBase(), IrDeclaration
interface IrSymbolDeclaration<out S : IrSymbol> : IrDeclaration {
override val symbol: S
}
interface IrOverridableDeclaration<S : IrSymbol> : IrDeclaration {
var overriddenSymbols: List<S>
}
@@ -23,9 +23,10 @@ import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrEnumEntry : IrDeclarationBase(), IrSymbolDeclaration<IrEnumEntrySymbol>, IrDeclarationWithName {
abstract class IrEnumEntry : IrDeclarationBase(), IrDeclarationWithName {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: ClassDescriptor
abstract override val symbol: IrEnumEntrySymbol
abstract var correspondingClass: IrClass?
abstract var initializerExpression: IrExpressionBody?
@@ -8,7 +8,9 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
interface IrFakeOverrideFunction : IrSymbolDeclaration<IrSimpleFunctionSymbol> {
interface IrFakeOverrideFunction : IrDeclaration {
override val symbol: IrSimpleFunctionSymbol
var modality: Modality
fun acquireSymbol(symbol: IrSimpleFunctionSymbol): IrSimpleFunction
@@ -8,7 +8,9 @@ package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
interface IrFakeOverrideProperty : IrSymbolDeclaration<IrPropertySymbol> {
interface IrFakeOverrideProperty : IrDeclaration {
override val symbol: IrPropertySymbol
var modality: Modality
var getter: IrSimpleFunction?
var setter: IrSimpleFunction?
@@ -16,11 +16,11 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrField :
IrDeclarationBase(),
IrSymbolDeclaration<IrFieldSymbol>,
IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: PropertyDescriptor
abstract override val symbol: IrFieldSymbol
abstract var type: IrType
abstract val isFinal: Boolean
@@ -13,9 +13,11 @@ import org.jetbrains.kotlin.ir.types.IrType
//TODO: make IrScript as IrPackageFragment, because script is used as a file, not as a class
//NOTE: declarations and statements stored separately
abstract class IrScript :
IrDeclarationBase(), IrSymbolDeclaration<IrScriptSymbol>, IrDeclarationWithName,
IrDeclarationBase(), IrDeclarationWithName,
IrDeclarationParent, IrStatementContainer {
abstract override val symbol: IrScriptSymbol
// NOTE: is the result of the FE conversion, because there script interpreted as a class and has receiver
// TODO: consider removing from here and handle appropriately in the lowering
abstract var thisReceiver: IrValueParameter
@@ -11,11 +11,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrSimpleFunction :
IrFunction(),
IrSymbolDeclaration<IrSimpleFunctionSymbol>,
IrOverridableDeclaration<IrSimpleFunctionSymbol>,
IrOverridableMember,
IrAttributeContainer {
abstract override val symbol: IrSimpleFunctionSymbol
abstract val isTailrec: Boolean
abstract val isSuspend: Boolean
abstract val isFakeOverride: Boolean
@@ -15,13 +15,13 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrTypeAlias :
IrDeclarationBase(),
IrSymbolDeclaration<IrTypeAliasSymbol>,
IrDeclarationWithName,
IrDeclarationWithVisibility,
IrTypeParametersContainer {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: TypeAliasDescriptor
abstract override val symbol: IrTypeAliasSymbol
abstract val isActual: Boolean
abstract var expandedType: IrType
@@ -24,9 +24,10 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.types.Variance
abstract class IrTypeParameter : IrDeclarationBase(), IrSymbolDeclaration<IrTypeParameterSymbol>, IrDeclarationWithName {
abstract class IrTypeParameter : IrDeclarationBase(), IrDeclarationWithName {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: TypeParameterDescriptor
abstract override val symbol: IrTypeParameterSymbol
abstract val variance: Variance
abstract val index: Int
@@ -24,9 +24,10 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
abstract class IrValueParameter : IrValueDeclaration(), IrSymbolDeclaration<IrValueParameterSymbol> {
abstract class IrValueParameter : IrValueDeclaration() {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: ParameterDescriptor
abstract override val symbol: IrValueParameterSymbol
abstract val index: Int
abstract var varargElementType: IrType?
@@ -21,9 +21,10 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
abstract class IrVariable : IrValueDeclaration(), IrSymbolDeclaration<IrVariableSymbol> {
abstract class IrVariable : IrValueDeclaration() {
@ObsoleteDescriptorBasedAPI
abstract override val descriptor: VariableDescriptor
abstract override val symbol: IrVariableSymbol
abstract val isVar: Boolean
abstract val isConst: Boolean
@@ -195,9 +195,8 @@ class SymbolTable(
}
} else {
if (d.isBound()) {
val result = (d.owner as? IrSymbolDeclaration<*>)?.symbol ?: descriptorToSymbol[d]
@Suppress("UNCHECKED_CAST")
result as S?
d.owner.symbol as S
} else {
descriptorToSymbol[d]
}
@@ -90,7 +90,6 @@ class ExpectActualTable(val expectDescriptorToSymbol: MutableMap<DeclarationDesc
fun findExpectsForActuals(declaration: IrDeclaration) {
if (declaration.descriptor !is MemberDescriptor) return
if (declaration !is IrSymbolDeclaration<*>) return
val descriptor = declaration.symbol.descriptor