Raw FIR: set "implicit boolean" result type for some operator calls
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import java.util.*
|
||||
|
||||
enum class FirOperation(val operator: String = "???") {
|
||||
// Binary
|
||||
RANGE(".."),
|
||||
@@ -37,6 +39,10 @@ enum class FirOperation(val operator: String = "???") {
|
||||
OTHER;
|
||||
|
||||
companion object {
|
||||
val ASSIGNMENTS = setOf(ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN, TIMES_ASSIGN, DIV_ASSIGN, REM_ASSIGN)
|
||||
val ASSIGNMENTS: Set<FirOperation> = EnumSet.of(ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN, TIMES_ASSIGN, DIV_ASSIGN, REM_ASSIGN)
|
||||
|
||||
val BOOLEANS: Set<FirOperation> = EnumSet.of(
|
||||
EQ, NOT_EQ, IDENTITY, NOT_IDENTITY, LT, GT, LT_EQ, GT_EQ, IN, NOT_IN, IS, NOT_IS
|
||||
)
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. 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.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
|
||||
abstract class FirAbstractOperationBasedCall(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
val operation: FirOperation
|
||||
) : FirAbstractCall(session, psi) {
|
||||
override var typeRef: FirTypeRef = if (operation in FirOperation.BOOLEANS) {
|
||||
FirImplicitBooleanTypeRef(session, null)
|
||||
} else {
|
||||
FirImplicitTypeRefImpl(session, null)
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -13,5 +13,5 @@ import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||
class FirOperatorCallImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val operation: FirOperation
|
||||
) : FirAbstractCall(session, psi), FirOperatorCall
|
||||
operation: FirOperation
|
||||
) : FirAbstractOperationBasedCall(session, psi, operation), FirOperatorCall
|
||||
+3
-3
@@ -17,11 +17,11 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
class FirTypeOperatorCallImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val operation: FirOperation,
|
||||
operation: FirOperation,
|
||||
override var conversionTypeRef: FirTypeRef
|
||||
) : FirAbstractCall(session, psi), FirTypeOperatorCall {
|
||||
) : FirAbstractOperationBasedCall(session, psi, operation), FirTypeOperatorCall {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
conversionTypeRef = conversionTypeRef.transformSingle(transformer, data)
|
||||
return super<FirAbstractCall>.transformChildren(transformer, data)
|
||||
return super<FirAbstractOperationBasedCall>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user