From 17bbaf27ea2c15c9e88678ed29f699389f5abdf5 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Wed, 3 Nov 2021 14:40:01 +0100 Subject: [PATCH] Fix when expression with binary expression conversion in fir2ir for LT --- .../jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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 4b420253d75..f70594b5514 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 @@ -5,10 +5,12 @@ package org.jetbrains.kotlin.fir.backend +import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.* import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.diagnostics.findChildByType import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.backend.generators.ClassMemberGenerator import org.jetbrains.kotlin.fir.backend.generators.OperatorExpressionGenerator @@ -786,11 +788,10 @@ class Fir2IrVisitor( override fun visitWhenExpression(whenExpression: FirWhenExpression, data: Any?): IrElement { val subjectVariable = generateWhenSubjectVariable(whenExpression) - val psi = whenExpression.psi val origin = when (whenExpression.source?.elementType) { KtNodeTypes.WHEN -> IrStatementOrigin.WHEN KtNodeTypes.IF -> IrStatementOrigin.IF - KtNodeTypes.BINARY_EXPRESSION -> when ((psi as? KtBinaryExpression)?.operationToken) { + KtNodeTypes.BINARY_EXPRESSION -> when (whenExpression.source?.operationToken) { KtTokens.OROR -> IrStatementOrigin.OROR KtTokens.ANDAND -> IrStatementOrigin.ANDAND else -> null @@ -1199,4 +1200,12 @@ class Fir2IrVisitor( val KtSourceElement.isChildOfForLoop: Boolean get() = if (this is KtPsiSourceElement) psi.parent is KtForExpression - else treeStructure.getParent(lighterASTNode)?.tokenType == KtNodeTypes.FOR \ No newline at end of file + else treeStructure.getParent(lighterASTNode)?.tokenType == KtNodeTypes.FOR + +val KtSourceElement.operationToken: IElementType? + get() { + assert(elementType == KtNodeTypes.BINARY_EXPRESSION) + return if (this is KtPsiSourceElement) (psi as? KtBinaryExpression)?.operationToken + else treeStructure.findChildByType(lighterASTNode, KtNodeTypes.OPERATION_REFERENCE)?.tokenType + ?: error("No operation reference for binary expression: $lighterASTNode") + } \ No newline at end of file