FIR2IR: use enum constructor call for enum entries
This commit is contained in:
@@ -404,16 +404,25 @@ class Fir2IrVisitor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirDelegatedConstructorCall.toIrDelegatingConstructorCall(): IrDelegatingConstructorCall? {
|
||||
private fun FirDelegatedConstructorCall.toIrDelegatingConstructorCall(): IrCallWithIndexedArgumentsBase? {
|
||||
val constructedIrType = constructedTypeRef.toIrType(this@Fir2IrVisitor.session, declarationStorage)
|
||||
val constructorSymbol = (this.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol as? FirConstructorSymbol
|
||||
?: return null
|
||||
return convertWithOffsets { startOffset, endOffset ->
|
||||
IrDelegatingConstructorCallImpl(
|
||||
startOffset, endOffset,
|
||||
constructedIrType,
|
||||
declarationStorage.getIrFunctionSymbol(constructorSymbol) as IrConstructorSymbol
|
||||
).apply {
|
||||
val irConstructorSymbol = declarationStorage.getIrFunctionSymbol(constructorSymbol) as IrConstructorSymbol
|
||||
if (constructorSymbol.fir.isFromEnumClass) {
|
||||
IrEnumConstructorCallImpl(
|
||||
startOffset, endOffset,
|
||||
constructedIrType,
|
||||
irConstructorSymbol
|
||||
)
|
||||
} else {
|
||||
IrDelegatingConstructorCallImpl(
|
||||
startOffset, endOffset,
|
||||
constructedIrType,
|
||||
irConstructorSymbol
|
||||
)
|
||||
}.apply {
|
||||
for ((index, argument) in arguments.withIndex()) {
|
||||
val argumentExpression = argument.toIrExpression()
|
||||
putValueArgument(index, argumentExpression)
|
||||
|
||||
@@ -421,7 +421,7 @@ internal object CheckVisibility : CheckerStage() {
|
||||
}
|
||||
Visibilities.PRIVATE, Visibilities.PRIVATE_TO_THIS -> {
|
||||
if (declaration.session == callInfo.session) {
|
||||
if (ownerId == null || declaration is FirConstructor && declaration.status.isFromSealedClass) {
|
||||
if (ownerId == null || declaration is FirConstructor && declaration.isFromSealedClass) {
|
||||
// Top-level: visible in file
|
||||
candidateFile == useSiteFile
|
||||
} else {
|
||||
|
||||
@@ -39,6 +39,8 @@ inline val FirMemberDeclaration.isExternal: Boolean get() = status.isExternal
|
||||
inline val FirMemberDeclaration.isSuspend: Boolean get() = status.isSuspend
|
||||
inline val FirMemberDeclaration.isConst: Boolean get() = status.isConst
|
||||
inline val FirMemberDeclaration.isLateInit: Boolean get() = status.isLateInit
|
||||
inline val FirMemberDeclaration.isFromSealedClass: Boolean get() = status.isFromSealedClass
|
||||
inline val FirMemberDeclaration.isFromEnumClass: Boolean get() = status.isFromEnumClass
|
||||
|
||||
inline val FirPropertyAccessor.modality get() = status.modality
|
||||
inline val FirPropertyAccessor.visibility get() = status.visibility
|
||||
|
||||
Reference in New Issue
Block a user