[FIR] Properly check when expression in FirConstCheckVisitor
Added proper checks for `FirWhenSubjectExpression` and `FirElseIfTrueCondition`
This commit is contained in:
+9
-1
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isConst
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
@@ -103,7 +104,10 @@ private class FirConstCheckVisitor(private val session: FirSession) : FirVisitor
|
||||
|
||||
whenExpression.subject?.accept(this, data)?.ifNotValidConst { return it }
|
||||
for (branch in whenExpression.branches) {
|
||||
branch.condition.accept(this, data).ifNotValidConst { return it }
|
||||
when (branch.condition) {
|
||||
is FirElseIfTrueCondition -> { /* skip */ }
|
||||
else -> branch.condition.accept(this, data).ifNotValidConst { return it }
|
||||
}
|
||||
branch.result.statements.forEach { stmt ->
|
||||
if (stmt !is FirExpression) return ConstantArgumentKind.NOT_CONST
|
||||
stmt.accept(this, data).ifNotValidConst { return it }
|
||||
@@ -112,6 +116,10 @@ private class FirConstCheckVisitor(private val session: FirSession) : FirVisitor
|
||||
return ConstantArgumentKind.VALID_CONST
|
||||
}
|
||||
|
||||
override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: Nothing?): ConstantArgumentKind {
|
||||
return if (intrinsicConstEvaluation) ConstantArgumentKind.VALID_CONST else ConstantArgumentKind.NOT_CONST
|
||||
}
|
||||
|
||||
override fun <T> visitConstExpression(constExpression: FirConstExpression<T>, data: Nothing?): ConstantArgumentKind {
|
||||
return ConstantArgumentKind.VALID_CONST
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user