[FIR] Add fir node for binary && and ||
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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<IrElement> { 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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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)) -> {
|
||||
|
||||
@@ -1,12 +1,4 @@
|
||||
FILE: in.kt
|
||||
public? final? fun foo(x: Int, y: Int, c: Collection<Int>): <implicit> {
|
||||
^foo when () {
|
||||
c#.contains#(x#) -> {
|
||||
c#.contains#(y#).not#()
|
||||
}
|
||||
else -> {
|
||||
Boolean(false)
|
||||
}
|
||||
}
|
||||
|
||||
^foo c#.contains#(x#) && c#.contains#(y#).not#()
|
||||
}
|
||||
|
||||
+10
-1
@@ -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<Name, ConeKotlinType> = LinkedHashMultimap.create()
|
||||
final override val noExpectedType = FirImplicitTypeRefImpl(null)
|
||||
private val booleanType = FirImplicitBooleanTypeRef(null)
|
||||
|
||||
final override val symbolProvider = session.service<FirSymbolProvider>()
|
||||
val scopes = mutableListOf<FirScope>()
|
||||
@@ -731,6 +731,15 @@ open class FirBodyResolveTransformer(
|
||||
return transformedGetClassCall.compose()
|
||||
}
|
||||
|
||||
override fun transformBinaryLogicExpression(
|
||||
binaryLogicExpression: FirBinaryLogicExpression,
|
||||
data: Any?
|
||||
): CompositeTransformResult<FirStatement> {
|
||||
return super.transformBinaryLogicExpression(binaryLogicExpression, booleanType).also {
|
||||
(it.single as FirBinaryLogicExpression).resultType = booleanType
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------- Util functions -----------------------
|
||||
|
||||
private inline fun <T> withLabelAndReceiverType(labelName: Name, owner: FirElement, type: ConeKotlinType, block: () -> T): T {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+34
@@ -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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||
return visitor.visitBinaryLogicExpression(this, data)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super.acceptChildren(visitor, data)
|
||||
leftOperand.accept(visitor, data)
|
||||
rightOperand.accept(visitor, data)
|
||||
}
|
||||
|
||||
abstract fun <D> transformLeftOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression
|
||||
abstract fun <D> transformRightOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression
|
||||
|
||||
enum class OperationKind(val token: String) {
|
||||
AND("&&"), OR("||")
|
||||
}
|
||||
}
|
||||
+36
@@ -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 <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
transformLeftOperand(transformer, data)
|
||||
transformRightOperand(transformer, data)
|
||||
return super.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
override fun <D> transformLeftOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression {
|
||||
leftOperand = leftOperand.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformRightOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression {
|
||||
rightOperand = rightOperand.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
}
|
||||
+11
-1
@@ -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<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformExpression(unknownTypeExpression, data)
|
||||
}
|
||||
|
||||
open fun transformBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformUnknownTypeExpression(binaryLogicExpression, data)
|
||||
}
|
||||
|
||||
open fun transformBlock(block: FirBlock, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformUnknownTypeExpression(block, data)
|
||||
}
|
||||
@@ -496,6 +502,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformBackingFieldReference(backingFieldReference, data)
|
||||
}
|
||||
|
||||
final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformBinaryLogicExpression(binaryLogicExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitBlock(block: FirBlock, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformBlock(block, data)
|
||||
}
|
||||
|
||||
@@ -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<out R, in D> {
|
||||
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)
|
||||
}
|
||||
|
||||
+11
-1
@@ -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<Unit, Nothing?>() {
|
||||
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<Unit, Nothing?>() {
|
||||
visitBackingFieldReference(backingFieldReference)
|
||||
}
|
||||
|
||||
final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: Nothing?) {
|
||||
visitBinaryLogicExpression(binaryLogicExpression)
|
||||
}
|
||||
|
||||
final override fun visitBlock(block: FirBlock, data: Nothing?) {
|
||||
visitBlock(block)
|
||||
}
|
||||
|
||||
Vendored
+8
-8
@@ -19,7 +19,7 @@ FILE fqName:<root> 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: <Inapplicable(INAPPLICABLE): [kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo]>#' type=IrErrorType
|
||||
GET_VAR 'y: kotlin.Any declared in <root>.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:<root> 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: <Unresolved name: compareTo>#' type=IrErrorType
|
||||
GET_VAR 'y: kotlin.Any declared in <root>.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:<root> 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: <Inapplicable(INAPPLICABLE): [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
|
||||
GET_VAR 'y: kotlin.Any declared in <root>.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:<root> 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: <Unresolved name: compareTo>#' type=IrErrorType
|
||||
GET_VAR 'y: kotlin.Any declared in <root>.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:<root> 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: <Unresolved name: compareTo>#' type=IrErrorType
|
||||
GET_VAR 'y: kotlin.Any declared in <root>.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:<root> 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: <Unresolved name: compareTo>#' type=IrErrorType
|
||||
GET_VAR 'y: kotlin.Any declared in <root>.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:<root> 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: <Inapplicable(INAPPLICABLE): [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
|
||||
GET_VAR 'x: kotlin.Any declared in <root>.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:<root> 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: <Inapplicable(INAPPLICABLE): [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
|
||||
GET_VAR 'x: kotlin.Any declared in <root>.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
|
||||
|
||||
+15
-15
@@ -90,67 +90,67 @@ FILE fqName:<root> 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 <root>.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 <root>.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 <root>.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 <root>.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 <root>.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 <root>.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 <root>.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 <root>.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 <root>.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
|
||||
|
||||
Reference in New Issue
Block a user