FIR2IR: distinguish constructor when picking return target
This commit is contained in:
committed by
Mikhail Glukhikh
parent
5ab822be36
commit
aa488eabc9
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.backend
|
package org.jetbrains.kotlin.fir.backend
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -97,7 +98,13 @@ class Fir2IrConversionScope {
|
|||||||
|
|
||||||
fun returnTarget(expression: FirReturnExpression, declarationStorage: Fir2IrDeclarationStorage): IrFunction {
|
fun returnTarget(expression: FirReturnExpression, declarationStorage: Fir2IrDeclarationStorage): IrFunction {
|
||||||
val firTarget = expression.target.labeledElement
|
val firTarget = expression.target.labeledElement
|
||||||
val irTarget = (firTarget as? FirFunction)?.let { declarationStorage.getCachedIrFunction(it) }
|
val irTarget = (firTarget as? FirFunction)?.let {
|
||||||
|
if (it is FirConstructor) {
|
||||||
|
declarationStorage.getCachedIrConstructor(it)
|
||||||
|
} else {
|
||||||
|
declarationStorage.getCachedIrFunction(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
for (potentialTarget in functionStack.asReversed()) {
|
for (potentialTarget in functionStack.asReversed()) {
|
||||||
if (potentialTarget == irTarget) {
|
if (potentialTarget == irTarget) {
|
||||||
return potentialTarget
|
return potentialTarget
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
inline fun run2(block: () -> Unit) = block()
|
inline fun run2(block: () -> Unit) = block()
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
|
|||||||
Reference in New Issue
Block a user