From 429010d70ede214c7dcfbd1564237b7317ef0f53 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 24 Oct 2023 12:10:32 +0300 Subject: [PATCH] [FIR2IR] Convert return expressions using symbols instead of IrFunction --- .../fir/backend/Fir2IrConversionScope.kt | 24 +++++++++---------- .../kotlin/fir/backend/Fir2IrVisitor.kt | 10 +------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt index 9ad92d0a57f..7f8aa8f9f7d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConversionScope.kt @@ -12,10 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.ir.builders.Scope import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol -import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI +import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.util.isSetter import org.jetbrains.kotlin.ir.util.parentClassOrNull import org.jetbrains.kotlin.ir.util.render @@ -193,28 +190,29 @@ class Fir2IrConversionScope(val configuration: Fir2IrConfiguration) { } } - fun returnTarget(expression: FirReturnExpression, declarationStorage: Fir2IrDeclarationStorage): IrFunction { + fun returnTarget(expression: FirReturnExpression, declarationStorage: Fir2IrDeclarationStorage): IrFunctionSymbol { val irTarget = when (val firTarget = expression.target.labeledElement) { - is FirConstructor -> declarationStorage.getCachedIrConstructorSymbol(firTarget)?.ownerIfBound() + is FirConstructor -> declarationStorage.getCachedIrConstructorSymbol(firTarget) is FirPropertyAccessor -> { - var answer: IrFunction? = null + var answer: IrFunctionSymbol? = null for ((property, firProperty) in propertyStack.asReversed()) { if (firProperty?.getter === firTarget) { - answer = property.getter + answer = property.getter?.symbol } else if (firProperty?.setter === firTarget) { - answer = property.setter + answer = property.setter?.symbol } } answer } - else -> declarationStorage.getCachedIrFunctionSymbol(firTarget)?.ownerIfBound() + else -> declarationStorage.getCachedIrFunctionSymbol(firTarget) } for (potentialTarget in functionStack.asReversed()) { - if (potentialTarget == irTarget) { - return potentialTarget + val targetSymbol = potentialTarget.symbol + if (targetSymbol == irTarget) { + return targetSymbol } } - return functionStack.last() + return functionStack.last().symbol } fun parent(): IrDeclarationParent? = parentStack.lastOrNull() diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 20dbebbb63e..34b1b5cdbf7 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -522,15 +522,7 @@ class Fir2IrVisitor( return returnExpression.convertWithOffsets { startOffset, endOffset -> // For implicit returns, use the expression endOffset to generate the expected line number for debugging. val returnStartOffset = if (returnExpression.source?.kind is KtFakeSourceElementKind.ImplicitReturn) endOffset else startOffset - IrReturnImpl( - returnStartOffset, endOffset, irBuiltIns.nothingType, - when (irTarget) { - is IrConstructor -> irTarget.symbol - is IrSimpleFunction -> irTarget.symbol - else -> error("Unknown return target: $irTarget") - }, - convertToIrExpression(result) - ) + IrReturnImpl(returnStartOffset, endOffset, irBuiltIns.nothingType, irTarget, convertToIrExpression(result)) }.let { returnExpression.accept(implicitCastInserter, it) }