[FIR2IR] Get rid of all usages of IrSymbol.owner from ClassMemberGenerator
^KT-60924
This commit is contained in:
committed by
Space Team
parent
100b158678
commit
ea3378566d
+25
-16
@@ -244,29 +244,37 @@ class Fir2IrDeclarationStorage(
|
||||
}
|
||||
|
||||
fun enterScope(declaration: IrDeclaration) {
|
||||
symbolTable.enterScope(declaration)
|
||||
if (declaration is IrSimpleFunction ||
|
||||
declaration is IrConstructor ||
|
||||
declaration is IrAnonymousInitializer ||
|
||||
declaration is IrProperty ||
|
||||
declaration is IrEnumEntry ||
|
||||
declaration is IrScript
|
||||
enterScope(declaration.symbol)
|
||||
}
|
||||
|
||||
fun leaveScope(declaration: IrDeclaration) {
|
||||
leaveScope(declaration.symbol)
|
||||
}
|
||||
|
||||
fun enterScope(symbol: IrSymbol) {
|
||||
symbolTable.enterScope(symbol)
|
||||
if (symbol is IrSimpleFunctionSymbol ||
|
||||
symbol is IrConstructorSymbol ||
|
||||
symbol is IrAnonymousInitializerSymbol ||
|
||||
symbol is IrPropertySymbol ||
|
||||
symbol is IrEnumEntrySymbol ||
|
||||
symbol is IrScriptSymbol
|
||||
) {
|
||||
localStorage.enterCallable()
|
||||
}
|
||||
}
|
||||
|
||||
fun leaveScope(declaration: IrDeclaration) {
|
||||
if (declaration is IrSimpleFunction ||
|
||||
declaration is IrConstructor ||
|
||||
declaration is IrAnonymousInitializer ||
|
||||
declaration is IrProperty ||
|
||||
declaration is IrEnumEntry ||
|
||||
declaration is IrScript
|
||||
fun leaveScope(symbol: IrSymbol) {
|
||||
if (symbol is IrSimpleFunctionSymbol ||
|
||||
symbol is IrConstructorSymbol ||
|
||||
symbol is IrAnonymousInitializerSymbol ||
|
||||
symbol is IrPropertySymbol ||
|
||||
symbol is IrEnumEntrySymbol ||
|
||||
symbol is IrScriptSymbol
|
||||
) {
|
||||
localStorage.leaveCallable()
|
||||
}
|
||||
symbolTable.leaveScope(declaration)
|
||||
symbolTable.leaveScope(symbol)
|
||||
}
|
||||
|
||||
private fun FirTypeRef.toIrType(typeOrigin: ConversionTypeOrigin = ConversionTypeOrigin.DEFAULT): IrType =
|
||||
@@ -2017,7 +2025,8 @@ class Fir2IrDeclarationStorage(
|
||||
internal val ENUM_SYNTHETIC_NAMES = mapOf(
|
||||
Name.identifier("values") to IrSyntheticBodyKind.ENUM_VALUES,
|
||||
Name.identifier("valueOf") to IrSyntheticBodyKind.ENUM_VALUEOF,
|
||||
Name.identifier("entries") to IrSyntheticBodyKind.ENUM_ENTRIES
|
||||
Name.identifier("entries") to IrSyntheticBodyKind.ENUM_ENTRIES,
|
||||
Name.special("<get-entries>") to IrSyntheticBodyKind.ENUM_ENTRIES
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbolInternals
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.constructedClassType
|
||||
import org.jetbrains.kotlin.ir.util.isSetter
|
||||
@@ -99,7 +98,6 @@ internal class ClassMemberGenerator(
|
||||
declarationStorage.leaveScope(irClass)
|
||||
}
|
||||
|
||||
@OptIn(IrSymbolInternals::class)
|
||||
fun <T : IrFunction> convertFunctionContent(irFunction: T, firFunction: FirFunction?, containingClass: FirClass?): T {
|
||||
conversionScope.withParent(irFunction) {
|
||||
if (firFunction != null) {
|
||||
@@ -173,8 +171,7 @@ internal class ClassMemberGenerator(
|
||||
when {
|
||||
// Create fake bodies for Enum.values/Enum.valueOf
|
||||
irFunction.origin == IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER -> {
|
||||
val name = (irFunction as? IrSimpleFunction)?.correspondingPropertySymbol?.owner?.name ?: irFunction.name
|
||||
val kind = Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES.getValue(name)
|
||||
val kind = Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES.getValue(irFunction.name)
|
||||
irFunction.body = IrSyntheticBodyImpl(startOffset, endOffset, kind)
|
||||
}
|
||||
irFunction.parent is IrClass && irFunction.parentAsClass.isData -> {
|
||||
@@ -341,7 +338,6 @@ internal class ClassMemberGenerator(
|
||||
return this
|
||||
}
|
||||
|
||||
@OptIn(IrSymbolInternals::class)
|
||||
internal fun FirDelegatedConstructorCall.toIrDelegatingConstructorCall(): IrExpression {
|
||||
val constructedIrType = constructedTypeRef.toIrType()
|
||||
val referencedSymbol = calleeReference.toResolvedConstructorSymbol()
|
||||
@@ -389,7 +385,7 @@ internal class ClassMemberGenerator(
|
||||
irBuiltIns.unitType,
|
||||
irConstructorSymbol,
|
||||
typeArgumentsCount = constructor.typeParameters.size,
|
||||
valueArgumentsCount = irConstructorSymbol.owner.valueParameters.size
|
||||
valueArgumentsCount = constructor.valueParameters.size + constructor.contextReceivers.size
|
||||
)
|
||||
}.let {
|
||||
if (constructor.typeParameters.isNotEmpty()) {
|
||||
@@ -405,9 +401,9 @@ internal class ClassMemberGenerator(
|
||||
it.dispatchReceiver = visitor.convertToIrExpression(firDispatchReceiver)
|
||||
}
|
||||
with(callGenerator) {
|
||||
declarationStorage.enterScope(irConstructorSymbol.owner)
|
||||
declarationStorage.enterScope(irConstructorSymbol)
|
||||
val result = it.applyCallArguments(this@toIrDelegatingConstructorCall)
|
||||
declarationStorage.leaveScope(irConstructorSymbol.owner)
|
||||
declarationStorage.leaveScope(irConstructorSymbol)
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user