diff --git a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt index b2ea888529a..51e9cc8416f 100644 --- a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt +++ b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt @@ -17,12 +17,14 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition -import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression import org.jetbrains.kotlin.fir.expressions.impl.FirUncheckedNotNullCastImpl import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference -import org.jetbrains.kotlin.fir.resolve.* +import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.directExpansionType +import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.resolve.withNullability import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.FirTypePlaceholderProjection @@ -1237,11 +1239,18 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver is FirTypeOperatorCall -> generate(expression) is FirUncheckedNotNullCastImpl -> generate(expression) is FirOperatorCall -> generate(expression) + is FirBinaryLogicExpression -> generate(expression) else -> inlineUnsupported(expression) } } } + private fun FlowContent.generate(binaryLogicExpression: FirBinaryLogicExpression) { + generate(binaryLogicExpression.leftOperand) + +" ${binaryLogicExpression.kind.token} " + generate(binaryLogicExpression.rightOperand) + } + private fun FlowContent.generate(qualifiedAccessExpression: FirQualifiedAccessExpression) { generateReceiver(qualifiedAccessExpression) generate(qualifiedAccessExpression.calleeReference) 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 ec4cefad648..76f4cd6541f 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,11 +5,13 @@ package org.jetbrains.kotlin.fir.backend -import org.jetbrains.kotlin.backend.common.descriptors.* +import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor +import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDescriptor import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter +import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition @@ -27,14 +29,20 @@ import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.* +import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.types.render import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.* +import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* @@ -1223,4 +1231,25 @@ internal class Fir2IrVisitor( } return super.visitResolvedQualifier(resolvedQualifier, data) } + + override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: Any?): IrElement { + return binaryLogicExpression.convertWithOffsets { startOffset, endOffset -> + val leftOperand = binaryLogicExpression.leftOperand.accept(this, data) as IrExpression + val rightOperand = binaryLogicExpression.rightOperand.accept(this, data) as IrExpression + when (binaryLogicExpression.kind) { + FirBinaryLogicExpression.OperationKind.AND -> { + IrIfThenElseImpl(startOffset, endOffset, irBuiltIns.booleanType, IrStatementOrigin.ANDAND).apply { + branches.add(IrBranchImpl(leftOperand, rightOperand)) + branches.add(elseBranch(constFalse(rightOperand.startOffset, rightOperand.endOffset))) + } + } + FirBinaryLogicExpression.OperationKind.OR -> { + IrIfThenElseImpl(startOffset, endOffset, irBuiltIns.booleanType, IrStatementOrigin.OROR).apply { + branches.add(IrBranchImpl(leftOperand, constTrue(leftOperand.startOffset, leftOperand.endOffset))) + branches.add(elseBranch(rightOperand)) + } + } + } + } + } } \ No newline at end of file diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index d75010a8f08..a1b2d9beea5 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -7,25 +7,30 @@ package org.jetbrains.kotlin.fir.builder import com.intellij.psi.PsiElement import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirFunctionTarget -import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirWhenSubject -import org.jetbrains.kotlin.fir.declarations.impl.* +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableAccessorsOwner +import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyAccessorImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirVariableImpl import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.* +import org.jetbrains.kotlin.fir.references.FirDelegateFieldReferenceImpl +import org.jetbrains.kotlin.fir.references.FirExplicitThisReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.ConeStarProjection import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.* +import org.jetbrains.kotlin.fir.types.impl.FirImplicitKPropertyTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.constants.evaluate.* import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.util.OperatorNameConventions @@ -158,21 +163,12 @@ fun FirExpression.generateNotNullOrOther( fun FirExpression.generateLazyLogicalOperation( other: FirExpression, isAnd: Boolean, basePsi: KtElement? -): FirWhenExpression { - val terminalExpression = FirConstExpressionImpl(psi, IrConstKind.Boolean, !isAnd) - val terminalBlock = FirSingleExpressionBlock(terminalExpression) - val otherBlock = FirSingleExpressionBlock(other) - return FirWhenExpressionImpl(basePsi).apply { - branches += FirWhenBranchImpl( - psi, this@generateLazyLogicalOperation, - if (isAnd) otherBlock else terminalBlock - ) - branches += FirWhenBranchImpl( - other.psi, FirElseIfTrueCondition(psi), - if (isAnd) terminalBlock else otherBlock - ) - typeRef = FirImplicitBooleanTypeRef(basePsi) - } +): FirBinaryLogicExpression { + val kind = if (isAnd) + FirBinaryLogicExpression.OperationKind.AND + else + FirBinaryLogicExpression.OperationKind.OR + return FirBinaryLogicExpressionImpl(basePsi, this, other, kind) } internal fun KtWhenCondition.toFirWhenCondition( diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/branches.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/branches.txt index b116b138e84..3d7f4d3a8cb 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/branches.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/branches.txt @@ -37,15 +37,7 @@ FILE: branches.kt } public? final? fun grade(g: Int): String { ^grade when (g#) { - when () { - ==($subj$, Int(6)) -> { - Boolean(true) - } - else -> { - ==($subj$, Int(7)) - } - } - -> { + ==($subj$, Int(6)) || ==($subj$, Int(7)) -> { String(Outstanding) } ==($subj$, Int(5)) -> { diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/in.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/in.txt index 5778d2fc772..af34521ff71 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/in.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/in.txt @@ -1,12 +1,4 @@ FILE: in.kt public? final? fun foo(x: Int, y: Int, c: Collection): { - ^foo when () { - c#.contains#(x#) -> { - c#.contains#(y#).not#() - } - else -> { - Boolean(false) - } - } - + ^foo c#.contains#(x#) && c#.contains#(y#).not#() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index 233ecf53d74..577d8f52cb3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope import org.jetbrains.kotlin.fir.scopes.impl.FirTopLevelDeclaredMemberScope import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType import org.jetbrains.kotlin.fir.symbols.* -import org.jetbrains.kotlin.fir.symbols.StandardClassIds.Int import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult @@ -48,6 +47,7 @@ open class FirBodyResolveTransformer( final override val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession) final override val labels: SetMultimap = LinkedHashMultimap.create() final override val noExpectedType = FirImplicitTypeRefImpl(null) + private val booleanType = FirImplicitBooleanTypeRef(null) final override val symbolProvider = session.service() val scopes = mutableListOf() @@ -731,6 +731,15 @@ open class FirBodyResolveTransformer( return transformedGetClassCall.compose() } + override fun transformBinaryLogicExpression( + binaryLogicExpression: FirBinaryLogicExpression, + data: Any? + ): CompositeTransformResult { + return super.transformBinaryLogicExpression(binaryLogicExpression, booleanType).also { + (it.single as FirBinaryLogicExpression).resultType = booleanType + } + } + // ----------------------- Util functions ----------------------- private inline fun withLabelAndReceiverType(labelName: Name, owner: FirElement, type: ConeKotlinType, block: () -> T): T { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index 4f0eba90ecc..1ed6efa6fd2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -949,4 +949,10 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { } print("|") } + + override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression) { + binaryLogicExpression.leftOperand.accept(this) + print(" ${binaryLogicExpression.kind.token} ") + binaryLogicExpression.rightOperand.accept(this) + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBinaryLogicExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBinaryLogicExpression.kt new file mode 100644 index 00000000000..d1f1ec7a1dd --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBinaryLogicExpression.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.expressions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor + +abstract class FirBinaryLogicExpression(psi: PsiElement?) : FirUnknownTypeExpression(psi) { + abstract val leftOperand: FirExpression + abstract val rightOperand: FirExpression + abstract val kind: OperationKind + + override fun accept(visitor: FirVisitor, data: D): R { + return visitor.visitBinaryLogicExpression(this, data) + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + super.acceptChildren(visitor, data) + leftOperand.accept(visitor, data) + rightOperand.accept(visitor, data) + } + + abstract fun transformLeftOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression + abstract fun transformRightOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression + + enum class OperationKind(val token: String) { + AND("&&"), OR("||") + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBinaryLogicExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBinaryLogicExpressionImpl.kt new file mode 100644 index 00000000000..b4de67be9e9 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBinaryLogicExpressionImpl.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.expressions.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.visitors.FirTransformer + +class FirBinaryLogicExpressionImpl( + psi: PsiElement?, + override var leftOperand: FirExpression, + override var rightOperand: FirExpression, + override val kind: OperationKind +) : FirBinaryLogicExpression(psi) { + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + transformLeftOperand(transformer, data) + transformRightOperand(transformer, data) + return super.transformChildren(transformer, data) + } + + override fun transformLeftOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression { + leftOperand = leftOperand.transformSingle(transformer, data) + return this + } + + override fun transformRightOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression { + rightOperand = rightOperand.transformSingle(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt index 00d56b2f5bc..5c2659adc1d 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt @@ -6,7 +6,9 @@ package org.jetbrains.kotlin.fir.visitors import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* import org.jetbrains.kotlin.fir.types.* @@ -280,6 +282,10 @@ abstract class FirTransformer : FirVisitor { + return transformUnknownTypeExpression(binaryLogicExpression, data) + } + open fun transformBlock(block: FirBlock, data: D): CompositeTransformResult { return transformUnknownTypeExpression(block, data) } @@ -496,6 +502,10 @@ abstract class FirTransformer : FirVisitor { + return transformBinaryLogicExpression(binaryLogicExpression, data) + } + final override fun visitBlock(block: FirBlock, data: D): CompositeTransformResult { return transformBlock(block, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt index 33a54216705..f815f751b06 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt @@ -6,7 +6,9 @@ package org.jetbrains.kotlin.fir.visitors import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* import org.jetbrains.kotlin.fir.types.* @@ -280,6 +282,10 @@ abstract class FirVisitor { return visitExpression(unknownTypeExpression, data) } + open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): R { + return visitUnknownTypeExpression(binaryLogicExpression, data) + } + open fun visitBlock(block: FirBlock, data: D): R { return visitUnknownTypeExpression(block, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt index 97d2f9e64a1..7b418075fdc 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt @@ -6,7 +6,9 @@ package org.jetbrains.kotlin.fir.visitors import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* import org.jetbrains.kotlin.fir.types.* @@ -280,6 +282,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitExpression(unknownTypeExpression, null) } + open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression) { + visitUnknownTypeExpression(binaryLogicExpression, null) + } + open fun visitBlock(block: FirBlock) { visitUnknownTypeExpression(block, null) } @@ -496,6 +502,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitBackingFieldReference(backingFieldReference) } + final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: Nothing?) { + visitBinaryLogicExpression(binaryLogicExpression) + } + final override fun visitBlock(block: FirBlock, data: Nothing?) { visitBlock(block) } diff --git a/compiler/testData/ir/irText/expressions/floatingPointComparisons/floatingPointCompareTo.fir.txt b/compiler/testData/ir/irText/expressions/floatingPointComparisons/floatingPointCompareTo.fir.txt index 481d9ee311d..0d00616998d 100644 --- a/compiler/testData/ir/irText/expressions/floatingPointComparisons/floatingPointCompareTo.fir.txt +++ b/compiler/testData/ir/irText/expressions/floatingPointComparisons/floatingPointCompareTo.fir.txt @@ -19,7 +19,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'y: kotlin.Any declared in .test2d' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false @@ -42,7 +42,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'y: kotlin.Any declared in .test3d' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false @@ -66,7 +66,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'y: kotlin.Any declared in .test2f' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false @@ -89,7 +89,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'y: kotlin.Any declared in .test3f' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false @@ -112,7 +112,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'y: kotlin.Any declared in .testFD' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false @@ -135,7 +135,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'y: kotlin.Any declared in .testDF' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false @@ -158,7 +158,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'x: kotlin.Any declared in .test2fr' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false @@ -174,7 +174,7 @@ FILE fqName: fileName:/floatingPointCompareTo.kt then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: ERROR_CALL 'Unresolved reference: #' type=IrErrorType GET_VAR 'x: kotlin.Any declared in .test3fr' type=kotlin.Any origin=null - arg1: CONST Int type=kotlin.Int value=0 + arg1: CONST Int type=kotlin.Boolean value=0 BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CONST Boolean type=kotlin.Boolean value=false diff --git a/compiler/testData/ir/irText/expressions/when.fir.txt b/compiler/testData/ir/irText/expressions/when.fir.txt index d6690f84194..d18d7b3fe89 100644 --- a/compiler/testData/ir/irText/expressions/when.fir.txt +++ b/compiler/testData/ir/irText/expressions/when.fir.txt @@ -90,67 +90,67 @@ FILE fqName: fileName:/when.kt VAR IR_TEMPORARY_VARIABLE name:tmp1_subject type:kotlin.Int [val] WHEN type=kotlin.String origin=WHEN BRANCH - if: WHEN type=kotlin.Boolean origin=null + if: WHEN type=kotlin.Boolean origin=OROR BRANCH - if: WHEN type=kotlin.Boolean origin=null + if: WHEN type=kotlin.Boolean origin=OROR BRANCH - if: WHEN type=kotlin.Boolean origin=null + if: WHEN type=kotlin.Boolean origin=OROR BRANCH if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=1 + arg1: CONST Int type=kotlin.Boolean value=1 then: CONST Boolean type=kotlin.Boolean value=true BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=2 + arg1: CONST Int type=kotlin.Boolean value=2 then: CONST Boolean type=kotlin.Boolean value=true BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=3 + arg1: CONST Int type=kotlin.Boolean value=3 then: CONST Boolean type=kotlin.Boolean value=true BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=4 + arg1: CONST Int type=kotlin.Boolean value=4 then: CONST String type=kotlin.String value="1234" BRANCH - if: WHEN type=kotlin.Boolean origin=null + if: WHEN type=kotlin.Boolean origin=OROR BRANCH - if: WHEN type=kotlin.Boolean origin=null + if: WHEN type=kotlin.Boolean origin=OROR BRANCH if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=5 + arg1: CONST Int type=kotlin.Boolean value=5 then: CONST Boolean type=kotlin.Boolean value=true BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=6 + arg1: CONST Int type=kotlin.Boolean value=6 then: CONST Boolean type=kotlin.Boolean value=true BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=7 + arg1: CONST Int type=kotlin.Boolean value=7 then: CONST String type=kotlin.String value="567" BRANCH - if: WHEN type=kotlin.Boolean origin=null + if: WHEN type=kotlin.Boolean origin=OROR BRANCH if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=8 + arg1: CONST Int type=kotlin.Boolean value=8 then: CONST Boolean type=kotlin.Boolean value=true BRANCH if: CONST Boolean type=kotlin.Boolean value=true then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ arg0: GET_VAR 'val tmp1_subject: kotlin.Int [val] declared in .testComma' type=kotlin.Int origin=null - arg1: CONST Int type=kotlin.Int value=9 + arg1: CONST Int type=kotlin.Boolean value=9 then: CONST String type=kotlin.String value="89" BRANCH if: CONST Boolean type=kotlin.Boolean value=true