IR: symbol for IrLocalDelegatedProperty
This commit is contained in:
+6
-3
@@ -319,6 +319,7 @@ private class IrUnboundSymbolReplacer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference): IrExpression {
|
override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference): IrExpression {
|
||||||
|
val localDelegatedProperty = expression.symbol.replaceOrSame(SymbolTable::referenceLocalDelegatedProperty)
|
||||||
val delegate = expression.delegate.replaceOrSame(SymbolTable::referenceVariable)
|
val delegate = expression.delegate.replaceOrSame(SymbolTable::referenceVariable)
|
||||||
val getter = expression.getter.replace(SymbolTable::referenceSimpleFunction) ?: expression.getter
|
val getter = expression.getter.replace(SymbolTable::referenceSimpleFunction) ?: expression.getter
|
||||||
val setter = expression.setter?.replace(SymbolTable::referenceSimpleFunction) ?: expression.setter
|
val setter = expression.setter?.replace(SymbolTable::referenceSimpleFunction) ?: expression.setter
|
||||||
@@ -329,9 +330,11 @@ private class IrUnboundSymbolReplacer(
|
|||||||
|
|
||||||
expression.transformChildrenVoid(this)
|
expression.transformChildrenVoid(this)
|
||||||
return with(expression) {
|
return with(expression) {
|
||||||
IrLocalDelegatedPropertyReferenceImpl(startOffset, endOffset, type, descriptor,
|
IrLocalDelegatedPropertyReferenceImpl(
|
||||||
delegate, getter, setter, origin).also {
|
startOffset, endOffset, type,
|
||||||
|
localDelegatedProperty,
|
||||||
|
delegate, getter, setter, origin
|
||||||
|
).also {
|
||||||
it.copyArgumentsFrom(this)
|
it.copyArgumentsFrom(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.builders.irBlockBody
|
|||||||
import org.jetbrains.kotlin.ir.builders.irGet
|
import org.jetbrains.kotlin.ir.builders.irGet
|
||||||
import org.jetbrains.kotlin.ir.builders.irReturn
|
import org.jetbrains.kotlin.ir.builders.irReturn
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrLocalDelegatedPropertyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrLocalDelegatedPropertyDelegateDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.IrLocalDelegatedPropertyDelegateDescriptor
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrLocalDelegatedPropertyDelegateDescriptorImpl
|
import org.jetbrains.kotlin.ir.descriptors.IrLocalDelegatedPropertyDelegateDescriptorImpl
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrPropertyDelegateDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.IrPropertyDelegateDescriptor
|
||||||
@@ -228,7 +227,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
|||||||
): IrLocalDelegatedProperty {
|
): IrLocalDelegatedProperty {
|
||||||
val kPropertyType = getKPropertyTypeForLocalDelegatedProperty(variableDescriptor)
|
val kPropertyType = getKPropertyTypeForLocalDelegatedProperty(variableDescriptor)
|
||||||
|
|
||||||
val irLocalDelegatedProperty = IrLocalDelegatedPropertyImpl(
|
val irLocalDelegatedProperty = context.symbolTable.declareLocalDelegatedProperty(
|
||||||
ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED,
|
ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED,
|
||||||
variableDescriptor,
|
variableDescriptor,
|
||||||
variableDescriptor.type.toIrType()
|
variableDescriptor.type.toIrType()
|
||||||
|
|||||||
+1
-1
@@ -121,7 +121,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
|
|
||||||
return IrLocalDelegatedPropertyReferenceImpl(
|
return IrLocalDelegatedPropertyReferenceImpl(
|
||||||
startOffset, endOffset, type.toIrType(),
|
startOffset, endOffset, type.toIrType(),
|
||||||
variableDescriptor,
|
context.symbolTable.referenceLocalDelegatedProperty(variableDescriptor),
|
||||||
irDelegateSymbol, getterSymbol, setterSymbol,
|
irDelegateSymbol, getterSymbol, setterSymbol,
|
||||||
origin
|
origin
|
||||||
)
|
)
|
||||||
|
|||||||
+7
-1
@@ -17,10 +17,16 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations
|
package org.jetbrains.kotlin.ir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
|
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
interface IrLocalDelegatedProperty : IrDeclarationWithName {
|
interface IrLocalDelegatedProperty :
|
||||||
|
IrDeclarationWithName,
|
||||||
|
IrSymbolOwner {
|
||||||
|
|
||||||
override val descriptor: VariableDescriptorWithAccessors
|
override val descriptor: VariableDescriptorWithAccessors
|
||||||
|
override val symbol: IrLocalDelegatedPropertySymbol
|
||||||
|
|
||||||
val type: IrType
|
val type: IrType
|
||||||
val isVar: Boolean
|
val isVar: Boolean
|
||||||
|
|||||||
+44
-13
@@ -21,6 +21,8 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty
|
import org.jetbrains.kotlin.ir.declarations.IrLocalDelegatedProperty
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.impl.IrLocalDelegatedPropertySymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
@@ -30,7 +32,7 @@ class IrLocalDelegatedPropertyImpl(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
override val descriptor: VariableDescriptorWithAccessors,
|
override val symbol: IrLocalDelegatedPropertySymbol,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val type: IrType,
|
override val type: IrType,
|
||||||
override val isVar: Boolean
|
override val isVar: Boolean
|
||||||
@@ -38,6 +40,39 @@ class IrLocalDelegatedPropertyImpl(
|
|||||||
IrDeclarationBase(startOffset, endOffset, origin),
|
IrDeclarationBase(startOffset, endOffset, origin),
|
||||||
IrLocalDelegatedProperty {
|
IrLocalDelegatedProperty {
|
||||||
|
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
origin: IrDeclarationOrigin,
|
||||||
|
symbol: IrLocalDelegatedPropertySymbol,
|
||||||
|
type: IrType
|
||||||
|
) : this(
|
||||||
|
startOffset, endOffset, origin, symbol,
|
||||||
|
symbol.descriptor.name,
|
||||||
|
type,
|
||||||
|
symbol.descriptor.isVar
|
||||||
|
)
|
||||||
|
|
||||||
|
@Deprecated("Creates unbound symbol")
|
||||||
|
constructor(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
origin: IrDeclarationOrigin,
|
||||||
|
descriptor: VariableDescriptorWithAccessors,
|
||||||
|
name: Name,
|
||||||
|
type: IrType,
|
||||||
|
isVar: Boolean
|
||||||
|
) : this(
|
||||||
|
startOffset, endOffset, origin,
|
||||||
|
IrLocalDelegatedPropertySymbolImpl(descriptor),
|
||||||
|
name, type, isVar
|
||||||
|
)
|
||||||
|
|
||||||
|
@Deprecated("Creates unbound symbol")
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -45,21 +80,12 @@ class IrLocalDelegatedPropertyImpl(
|
|||||||
descriptor: VariableDescriptorWithAccessors,
|
descriptor: VariableDescriptorWithAccessors,
|
||||||
type: IrType
|
type: IrType
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset, origin, descriptor,
|
startOffset, endOffset, origin,
|
||||||
|
IrLocalDelegatedPropertySymbolImpl(descriptor),
|
||||||
descriptor.name, type, descriptor.isVar
|
descriptor.name, type, descriptor.isVar
|
||||||
)
|
)
|
||||||
|
|
||||||
constructor(
|
@Deprecated("Creates unbound symbol")
|
||||||
startOffset: Int,
|
|
||||||
endOffset: Int,
|
|
||||||
origin: IrDeclarationOrigin,
|
|
||||||
descriptor: VariableDescriptorWithAccessors,
|
|
||||||
type: IrType,
|
|
||||||
delegate: IrVariable
|
|
||||||
) : this(startOffset, endOffset, origin, descriptor, type) {
|
|
||||||
this.delegate = delegate
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -75,8 +101,13 @@ class IrLocalDelegatedPropertyImpl(
|
|||||||
this.setter = setter
|
this.setter = setter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val descriptor: VariableDescriptorWithAccessors
|
||||||
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override lateinit var delegate: IrVariable
|
override lateinit var delegate: IrVariable
|
||||||
|
|
||||||
override lateinit var getter: IrFunction
|
override lateinit var getter: IrFunction
|
||||||
|
|
||||||
override var setter: IrFunction? = null
|
override var setter: IrFunction? = null
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ interface IrPropertyReference : IrCallableReference {
|
|||||||
|
|
||||||
interface IrLocalDelegatedPropertyReference : IrCallableReference {
|
interface IrLocalDelegatedPropertyReference : IrCallableReference {
|
||||||
override val descriptor: VariableDescriptorWithAccessors
|
override val descriptor: VariableDescriptorWithAccessors
|
||||||
|
val symbol: IrLocalDelegatedPropertySymbol
|
||||||
val delegate: IrVariableSymbol
|
val delegate: IrVariableSymbol
|
||||||
val getter: IrSimpleFunctionSymbol
|
val getter: IrSimpleFunctionSymbol
|
||||||
val setter: IrSimpleFunctionSymbol?
|
val setter: IrSimpleFunctionSymbol?
|
||||||
|
|||||||
+5
-1
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.ir.expressions.impl
|
|||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
|
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference
|
import org.jetbrains.kotlin.ir.expressions.IrLocalDelegatedPropertyReference
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrLocalDelegatedPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -28,7 +29,7 @@ class IrLocalDelegatedPropertyReferenceImpl(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
override val descriptor: VariableDescriptorWithAccessors,
|
override val symbol: IrLocalDelegatedPropertySymbol,
|
||||||
override val delegate: IrVariableSymbol,
|
override val delegate: IrVariableSymbol,
|
||||||
override val getter: IrSimpleFunctionSymbol,
|
override val getter: IrSimpleFunctionSymbol,
|
||||||
override val setter: IrSimpleFunctionSymbol?,
|
override val setter: IrSimpleFunctionSymbol?,
|
||||||
@@ -37,6 +38,9 @@ class IrLocalDelegatedPropertyReferenceImpl(
|
|||||||
IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, 0, origin),
|
IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, 0, origin),
|
||||||
IrLocalDelegatedPropertyReference {
|
IrLocalDelegatedPropertyReference {
|
||||||
|
|
||||||
|
override val descriptor: VariableDescriptorWithAccessors
|
||||||
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitLocalDelegatedPropertyReference(this, data)
|
visitor.visitLocalDelegatedPropertyReference(this, data)
|
||||||
}
|
}
|
||||||
@@ -170,3 +170,10 @@ interface IrPropertySymbol :
|
|||||||
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
visitor.visitPropertySymbol(this, data)
|
visitor.visitPropertySymbol(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface IrLocalDelegatedPropertySymbol :
|
||||||
|
IrBindableSymbol<VariableDescriptorWithAccessors, IrLocalDelegatedProperty> {
|
||||||
|
|
||||||
|
override fun <D, R> accept(visitor: IrSymbolVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitLocalDelegatedPropertySymbol(this, data)
|
||||||
|
}
|
||||||
@@ -102,7 +102,10 @@ class IrReturnableBlockSymbolImpl(descriptor: FunctionDescriptor) :
|
|||||||
IrBindableSymbolBase<FunctionDescriptor, IrReturnableBlock>(descriptor),
|
IrBindableSymbolBase<FunctionDescriptor, IrReturnableBlock>(descriptor),
|
||||||
IrReturnableBlockSymbol
|
IrReturnableBlockSymbol
|
||||||
|
|
||||||
|
|
||||||
class IrPropertySymbolImpl(descriptor: PropertyDescriptor) :
|
class IrPropertySymbolImpl(descriptor: PropertyDescriptor) :
|
||||||
IrBindableSymbolBase<PropertyDescriptor, IrProperty>(descriptor),
|
IrBindableSymbolBase<PropertyDescriptor, IrProperty>(descriptor),
|
||||||
IrPropertySymbol
|
IrPropertySymbol
|
||||||
|
|
||||||
|
class IrLocalDelegatedPropertySymbolImpl(descriptor: VariableDescriptorWithAccessors) :
|
||||||
|
IrBindableSymbolBase<VariableDescriptorWithAccessors, IrLocalDelegatedProperty>(descriptor),
|
||||||
|
IrLocalDelegatedPropertySymbol
|
||||||
@@ -33,7 +33,7 @@ import java.util.*
|
|||||||
|
|
||||||
inline fun <reified T : IrElement> T.deepCopyWithSymbols(
|
inline fun <reified T : IrElement> T.deepCopyWithSymbols(
|
||||||
initialParent: IrDeclarationParent? = null,
|
initialParent: IrDeclarationParent? = null,
|
||||||
descriptorRemapper: DescriptorsRemapper = DescriptorsRemapper.DEFAULT
|
descriptorRemapper: DescriptorsRemapper = DescriptorsRemapper.Default
|
||||||
): T {
|
): T {
|
||||||
val symbolRemapper = DeepCopySymbolRemapper(descriptorRemapper)
|
val symbolRemapper = DeepCopySymbolRemapper(descriptorRemapper)
|
||||||
acceptVoid(symbolRemapper)
|
acceptVoid(symbolRemapper)
|
||||||
@@ -238,13 +238,13 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
IrLocalDelegatedPropertyImpl(
|
IrLocalDelegatedPropertyImpl(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
declaration.descriptor, // TODO
|
symbolRemapper.getDeclaredLocalDelegatedProperty(declaration.symbol),
|
||||||
declaration.type.remapType(),
|
declaration.type.remapType()
|
||||||
declaration.delegate.transform(),
|
|
||||||
declaration.getter.transform(),
|
|
||||||
declaration.setter?.transform()
|
|
||||||
).apply {
|
).apply {
|
||||||
transformAnnotations(declaration)
|
transformAnnotations(declaration)
|
||||||
|
delegate = declaration.delegate.transform()
|
||||||
|
getter = declaration.getter.transform()
|
||||||
|
setter = declaration.setter?.transform()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEnumEntry(declaration: IrEnumEntry): IrEnumEntry =
|
override fun visitEnumEntry(declaration: IrEnumEntry): IrEnumEntry =
|
||||||
@@ -573,7 +573,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
IrLocalDelegatedPropertyReferenceImpl(
|
IrLocalDelegatedPropertyReferenceImpl(
|
||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type.remapType(),
|
expression.type.remapType(),
|
||||||
expression.descriptor,
|
symbolRemapper.getReferencedLocalDelegatedProperty(expression.symbol),
|
||||||
symbolRemapper.getReferencedVariable(expression.delegate),
|
symbolRemapper.getReferencedVariable(expression.delegate),
|
||||||
symbolRemapper.getReferencedSimpleFunction(expression.getter),
|
symbolRemapper.getReferencedSimpleFunction(expression.getter),
|
||||||
expression.setter?.let { symbolRemapper.getReferencedSimpleFunction(it) },
|
expression.setter?.let { symbolRemapper.getReferencedSimpleFunction(it) },
|
||||||
|
|||||||
@@ -27,8 +27,9 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
|||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
|
|
||||||
open class DeepCopySymbolRemapper(
|
open class DeepCopySymbolRemapper(
|
||||||
private val descriptorsRemapper: DescriptorsRemapper = DescriptorsRemapper.DEFAULT
|
private val descriptorsRemapper: DescriptorsRemapper = DescriptorsRemapper.Default
|
||||||
) : IrElementVisitorVoid, SymbolRemapper {
|
) : IrElementVisitorVoid, SymbolRemapper {
|
||||||
|
|
||||||
private val classes = hashMapOf<IrClassSymbol, IrClassSymbol>()
|
private val classes = hashMapOf<IrClassSymbol, IrClassSymbol>()
|
||||||
private val constructors = hashMapOf<IrConstructorSymbol, IrConstructorSymbol>()
|
private val constructors = hashMapOf<IrConstructorSymbol, IrConstructorSymbol>()
|
||||||
private val enumEntries = hashMapOf<IrEnumEntrySymbol, IrEnumEntrySymbol>()
|
private val enumEntries = hashMapOf<IrEnumEntrySymbol, IrEnumEntrySymbol>()
|
||||||
@@ -41,6 +42,7 @@ open class DeepCopySymbolRemapper(
|
|||||||
private val typeParameters = hashMapOf<IrTypeParameterSymbol, IrTypeParameterSymbol>()
|
private val typeParameters = hashMapOf<IrTypeParameterSymbol, IrTypeParameterSymbol>()
|
||||||
private val valueParameters = hashMapOf<IrValueParameterSymbol, IrValueParameterSymbol>()
|
private val valueParameters = hashMapOf<IrValueParameterSymbol, IrValueParameterSymbol>()
|
||||||
private val variables = hashMapOf<IrVariableSymbol, IrVariableSymbol>()
|
private val variables = hashMapOf<IrVariableSymbol, IrVariableSymbol>()
|
||||||
|
private val localDelegatedProperties = hashMapOf<IrLocalDelegatedPropertySymbol, IrLocalDelegatedPropertySymbol>()
|
||||||
|
|
||||||
override fun visitElement(element: IrElement) {
|
override fun visitElement(element: IrElement) {
|
||||||
element.acceptChildrenVoid(this)
|
element.acceptChildrenVoid(this)
|
||||||
@@ -132,6 +134,13 @@ open class DeepCopySymbolRemapper(
|
|||||||
declaration.acceptChildrenVoid(this)
|
declaration.acceptChildrenVoid(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty) {
|
||||||
|
remapSymbol(localDelegatedProperties, declaration) {
|
||||||
|
IrLocalDelegatedPropertySymbolImpl(descriptorsRemapper.remapDeclaredLocalDelegatedProperty(it.descriptor))
|
||||||
|
}
|
||||||
|
declaration.acceptChildrenVoid(this)
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitBlock(expression: IrBlock) {
|
override fun visitBlock(expression: IrBlock) {
|
||||||
if (expression is IrReturnableBlock) {
|
if (expression is IrReturnableBlock) {
|
||||||
remapSymbol(returnableBlocks, expression) {
|
remapSymbol(returnableBlocks, expression) {
|
||||||
@@ -162,11 +171,16 @@ open class DeepCopySymbolRemapper(
|
|||||||
override fun getDeclaredVariable(symbol: IrVariableSymbol): IrVariableSymbol = variables.getDeclared(symbol)
|
override fun getDeclaredVariable(symbol: IrVariableSymbol): IrVariableSymbol = variables.getDeclared(symbol)
|
||||||
override fun getDeclaredTypeParameter(symbol: IrTypeParameterSymbol): IrTypeParameterSymbol = typeParameters.getDeclared(symbol)
|
override fun getDeclaredTypeParameter(symbol: IrTypeParameterSymbol): IrTypeParameterSymbol = typeParameters.getDeclared(symbol)
|
||||||
override fun getDeclaredValueParameter(symbol: IrValueParameterSymbol): IrValueParameterSymbol = valueParameters.getDeclared(symbol)
|
override fun getDeclaredValueParameter(symbol: IrValueParameterSymbol): IrValueParameterSymbol = valueParameters.getDeclared(symbol)
|
||||||
|
override fun getDeclaredLocalDelegatedProperty(symbol: IrLocalDelegatedPropertySymbol): IrLocalDelegatedPropertySymbol =
|
||||||
|
localDelegatedProperties.getDeclared(symbol)
|
||||||
|
|
||||||
override fun getReferencedClass(symbol: IrClassSymbol): IrClassSymbol = classes.getReferenced(symbol)
|
override fun getReferencedClass(symbol: IrClassSymbol): IrClassSymbol = classes.getReferenced(symbol)
|
||||||
override fun getReferencedClassOrNull(symbol: IrClassSymbol?): IrClassSymbol? = symbol?.let { classes.getReferenced(it) }
|
override fun getReferencedClassOrNull(symbol: IrClassSymbol?): IrClassSymbol? = symbol?.let { classes.getReferenced(it) }
|
||||||
override fun getReferencedEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol = enumEntries.getReferenced(symbol)
|
override fun getReferencedEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol = enumEntries.getReferenced(symbol)
|
||||||
override fun getReferencedVariable(symbol: IrVariableSymbol): IrVariableSymbol = variables.getReferenced(symbol)
|
override fun getReferencedVariable(symbol: IrVariableSymbol): IrVariableSymbol = variables.getReferenced(symbol)
|
||||||
|
override fun getReferencedLocalDelegatedProperty(symbol: IrLocalDelegatedPropertySymbol): IrLocalDelegatedPropertySymbol =
|
||||||
|
localDelegatedProperties.getReferenced(symbol)
|
||||||
|
|
||||||
override fun getReferencedField(symbol: IrFieldSymbol): IrFieldSymbol = fields.getReferenced(symbol)
|
override fun getReferencedField(symbol: IrFieldSymbol): IrFieldSymbol = fields.getReferenced(symbol)
|
||||||
override fun getReferencedConstructor(symbol: IrConstructorSymbol): IrConstructorSymbol = constructors.getReferenced(symbol)
|
override fun getReferencedConstructor(symbol: IrConstructorSymbol): IrConstructorSymbol = constructors.getReferenced(symbol)
|
||||||
override fun getReferencedSimpleFunction(symbol: IrSimpleFunctionSymbol): IrSimpleFunctionSymbol = functions.getReferenced(symbol)
|
override fun getReferencedSimpleFunction(symbol: IrSimpleFunctionSymbol): IrSimpleFunctionSymbol = functions.getReferenced(symbol)
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ interface DescriptorsRemapper {
|
|||||||
fun remapDeclaredTypeParameter(descriptor: TypeParameterDescriptor): TypeParameterDescriptor = descriptor
|
fun remapDeclaredTypeParameter(descriptor: TypeParameterDescriptor): TypeParameterDescriptor = descriptor
|
||||||
fun remapDeclaredValueParameter(descriptor: ParameterDescriptor): ParameterDescriptor = descriptor
|
fun remapDeclaredValueParameter(descriptor: ParameterDescriptor): ParameterDescriptor = descriptor
|
||||||
fun remapDeclaredVariable(descriptor: VariableDescriptor): VariableDescriptor = descriptor
|
fun remapDeclaredVariable(descriptor: VariableDescriptor): VariableDescriptor = descriptor
|
||||||
|
fun remapDeclaredLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors): VariableDescriptorWithAccessors = descriptor
|
||||||
|
|
||||||
object DEFAULT : DescriptorsRemapper
|
object Default : DescriptorsRemapper
|
||||||
}
|
}
|
||||||
@@ -63,4 +63,7 @@ interface IrSymbolVisitor<out R, in D> {
|
|||||||
|
|
||||||
fun visitPropertySymbol(symbol: IrPropertySymbol, data: D) =
|
fun visitPropertySymbol(symbol: IrPropertySymbol, data: D) =
|
||||||
visitSymbol(symbol, data)
|
visitSymbol(symbol, data)
|
||||||
|
|
||||||
|
fun visitLocalDelegatedPropertySymbol(symbol: IrLocalDelegatedPropertySymbol, data: D) =
|
||||||
|
visitSymbol(symbol, data)
|
||||||
}
|
}
|
||||||
@@ -28,12 +28,14 @@ interface SymbolRemapper {
|
|||||||
fun getDeclaredEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol
|
fun getDeclaredEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol
|
||||||
fun getDeclaredExternalPackageFragment(symbol: IrExternalPackageFragmentSymbol): IrExternalPackageFragmentSymbol
|
fun getDeclaredExternalPackageFragment(symbol: IrExternalPackageFragmentSymbol): IrExternalPackageFragmentSymbol
|
||||||
fun getDeclaredVariable(symbol: IrVariableSymbol): IrVariableSymbol
|
fun getDeclaredVariable(symbol: IrVariableSymbol): IrVariableSymbol
|
||||||
|
fun getDeclaredLocalDelegatedProperty(symbol: IrLocalDelegatedPropertySymbol): IrLocalDelegatedPropertySymbol
|
||||||
fun getDeclaredTypeParameter(symbol: IrTypeParameterSymbol): IrTypeParameterSymbol
|
fun getDeclaredTypeParameter(symbol: IrTypeParameterSymbol): IrTypeParameterSymbol
|
||||||
fun getDeclaredValueParameter(symbol: IrValueParameterSymbol): IrValueParameterSymbol
|
fun getDeclaredValueParameter(symbol: IrValueParameterSymbol): IrValueParameterSymbol
|
||||||
fun getReferencedClass(symbol: IrClassSymbol): IrClassSymbol
|
fun getReferencedClass(symbol: IrClassSymbol): IrClassSymbol
|
||||||
fun getReferencedClassOrNull(symbol: IrClassSymbol?): IrClassSymbol?
|
fun getReferencedClassOrNull(symbol: IrClassSymbol?): IrClassSymbol?
|
||||||
fun getReferencedEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol
|
fun getReferencedEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol
|
||||||
fun getReferencedVariable(symbol: IrVariableSymbol): IrVariableSymbol
|
fun getReferencedVariable(symbol: IrVariableSymbol): IrVariableSymbol
|
||||||
|
fun getReferencedLocalDelegatedProperty(symbol: IrLocalDelegatedPropertySymbol): IrLocalDelegatedPropertySymbol
|
||||||
fun getReferencedField(symbol: IrFieldSymbol): IrFieldSymbol
|
fun getReferencedField(symbol: IrFieldSymbol): IrFieldSymbol
|
||||||
fun getReferencedConstructor(symbol: IrConstructorSymbol): IrConstructorSymbol
|
fun getReferencedConstructor(symbol: IrConstructorSymbol): IrConstructorSymbol
|
||||||
fun getReferencedValue(symbol: IrValueSymbol): IrValueSymbol
|
fun getReferencedValue(symbol: IrValueSymbol): IrValueSymbol
|
||||||
|
|||||||
@@ -207,7 +207,10 @@ open class SymbolTable : ReferenceSymbolTable {
|
|||||||
private val scopedTypeParameterSymbolTable = ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
private val scopedTypeParameterSymbolTable = ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||||
private val valueParameterSymbolTable = ScopedSymbolTable<ParameterDescriptor, IrValueParameter, IrValueParameterSymbol>()
|
private val valueParameterSymbolTable = ScopedSymbolTable<ParameterDescriptor, IrValueParameter, IrValueParameterSymbol>()
|
||||||
private val variableSymbolTable = ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
private val variableSymbolTable = ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
||||||
private val scopedSymbolTables = listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable)
|
private val localDelegatedPropertySymbolTable =
|
||||||
|
ScopedSymbolTable<VariableDescriptorWithAccessors, IrLocalDelegatedProperty, IrLocalDelegatedPropertySymbol>()
|
||||||
|
private val scopedSymbolTables =
|
||||||
|
listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable)
|
||||||
|
|
||||||
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
||||||
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
||||||
@@ -220,7 +223,6 @@ open class SymbolTable : ReferenceSymbolTable {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun declareAnonymousInitializer(
|
fun declareAnonymousInitializer(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -467,6 +469,24 @@ open class SymbolTable : ReferenceSymbolTable {
|
|||||||
|
|
||||||
val unboundVariables: Set<IrVariableSymbol> get() = variableSymbolTable.unboundSymbols
|
val unboundVariables: Set<IrVariableSymbol> get() = variableSymbolTable.unboundSymbols
|
||||||
|
|
||||||
|
fun declareLocalDelegatedProperty(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
origin: IrDeclarationOrigin,
|
||||||
|
descriptor: VariableDescriptorWithAccessors,
|
||||||
|
type: IrType
|
||||||
|
): IrLocalDelegatedProperty =
|
||||||
|
localDelegatedPropertySymbolTable.declareLocal(
|
||||||
|
descriptor,
|
||||||
|
{ IrLocalDelegatedPropertySymbolImpl(descriptor) },
|
||||||
|
{ IrLocalDelegatedPropertyImpl(startOffset, endOffset, origin, it, type) }
|
||||||
|
)
|
||||||
|
|
||||||
|
fun referenceLocalDelegatedProperty(descriptor: VariableDescriptorWithAccessors) =
|
||||||
|
localDelegatedPropertySymbolTable.referenced(descriptor) {
|
||||||
|
throw AssertionError("Undefined local delegated property referenced: $descriptor")
|
||||||
|
}
|
||||||
|
|
||||||
override fun enterScope(owner: DeclarationDescriptor) {
|
override fun enterScope(owner: DeclarationDescriptor) {
|
||||||
scopedSymbolTables.forEach { it.enterScope(owner) }
|
scopedSymbolTables.forEach { it.enterScope(owner) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user