[FIR2IR] Fix considering of Contains intrinsic
This commit is contained in:
committed by
TeamCityServer
parent
15d23f2a72
commit
0d91e16a15
@@ -440,7 +440,8 @@ private val nameToOperationConventionOrigin = mutableMapOf(
|
|||||||
OperatorNameConventions.DIV to IrStatementOrigin.DIV,
|
OperatorNameConventions.DIV to IrStatementOrigin.DIV,
|
||||||
OperatorNameConventions.MOD to IrStatementOrigin.PERC,
|
OperatorNameConventions.MOD to IrStatementOrigin.PERC,
|
||||||
OperatorNameConventions.REM to IrStatementOrigin.PERC,
|
OperatorNameConventions.REM to IrStatementOrigin.PERC,
|
||||||
OperatorNameConventions.RANGE_TO to IrStatementOrigin.RANGE
|
OperatorNameConventions.RANGE_TO to IrStatementOrigin.RANGE,
|
||||||
|
OperatorNameConventions.CONTAINS to IrStatementOrigin.IN,
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun FirReference.statementOrigin(): IrStatementOrigin? {
|
internal fun FirReference.statementOrigin(): IrStatementOrigin? {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun testPrimitiveArray(i: Int, ints: IntArray) = i in ints.indices
|
fun testPrimitiveArray(i: Int, ints: IntArray) = i in ints.indices
|
||||||
|
|
||||||
fun testObjectArray(i: Int, xs: Array<Any>) = i in xs.indices
|
fun testObjectArray(i: Int, xs: Array<Any>) = i in xs.indices
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun testCharSequence(i: Int, cs: CharSequence) = i in cs.indices
|
fun testCharSequence(i: Int, cs: CharSequence) = i in cs.indices
|
||||||
|
|
||||||
fun testLongWithCharSequence(i: Long, cs: CharSequence) = i in cs.indices
|
fun testLongWithCharSequence(i: Long, cs: CharSequence) = i in cs.indices
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun testCollection(i: Int, xs: List<Any>) = i in xs.indices
|
fun testCollection(i: Int, xs: List<Any>) = i in xs.indices
|
||||||
|
|
||||||
fun testLongWithCollection(i: Long, xs: List<Any>) = i in xs.indices
|
fun testLongWithCollection(i: Long, xs: List<Any>) = i in xs.indices
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun test1(a: String) = a in "alpha" .. "omega"
|
fun test1(a: String) = a in "alpha" .. "omega"
|
||||||
fun test2(a: String) = a !in "alpha" .. "omega"
|
fun test2(a: String) = a !in "alpha" .. "omega"
|
||||||
fun <T : Comparable<T>> test3(x: T, left: T, right: T) = x in left .. right
|
fun <T : Comparable<T>> test3(x: T, left: T, right: T) = x in left .. right
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun ub_ub(x: UByte, a: UByte, b: UByte) = x in a..b
|
fun ub_ub(x: UByte, a: UByte, b: UByte) = x in a..b
|
||||||
fun ub_us(x: UByte, a: UShort, b: UShort) = x in a..b
|
fun ub_us(x: UByte, a: UShort, b: UShort) = x in a..b
|
||||||
fun ub_ui(x: UByte, a: UInt, b: UInt) = x in a..b
|
fun ub_ui(x: UByte, a: UInt, b: UInt) = x in a..b
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// ULong in range of UInt, uses non-intrinsic 'contains' for non-IR backend
|
// ULong in range of UInt, uses non-intrinsic 'contains' for non-IR backend
|
||||||
|
|
||||||
fun ul_ub(x: ULong, a: UByte, b: UByte) = x in a..b
|
fun ul_ub(x: ULong, a: UByte, b: UByte) = x in a..b
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun inInt(x: Long): Boolean {
|
fun inInt(x: Long): Boolean {
|
||||||
return x in 1..2
|
return x in 1..2
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun Byte.inByte(left: Byte, right: Byte) = this in left..right
|
fun Byte.inByte(left: Byte, right: Byte) = this in left..right
|
||||||
|
|
||||||
fun Short.inInt(left: Int, right: Int) = this in left .. right
|
fun Short.inInt(left: Int, right: Int) = this in left .. right
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun testUIntRangeLiteral(a: UInt, b: UInt) = 42u in a .. b
|
fun testUIntRangeLiteral(a: UInt, b: UInt) = 42u in a .. b
|
||||||
|
|
||||||
fun testULongRangeLiteral(a: ULong, b: ULong) = 42UL in a .. b
|
fun testULongRangeLiteral(a: ULong, b: ULong) = 42UL in a .. b
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
fun testChar(a: Char, x: Char, y: Char) = a in x until y
|
fun testChar(a: Char, x: Char, y: Char) = a in x until y
|
||||||
|
|
||||||
fun testByte(a: Byte, x: Byte, y: Byte) = a in x until y
|
fun testByte(a: Byte, x: Byte, y: Byte) = a in x until y
|
||||||
|
|||||||
+4
-4
@@ -4,7 +4,7 @@ FILE fqName:<root> fileName:/in.kt
|
|||||||
VALUE_PARAMETER name:x index:1 type:kotlin.collections.Collection<kotlin.Any>
|
VALUE_PARAMETER name:x index:1 type:kotlin.collections.Collection<kotlin.Any>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='public final fun test1 (a: kotlin.Any, x: kotlin.collections.Collection<kotlin.Any>): kotlin.Boolean declared in <root>'
|
RETURN type=kotlin.Nothing from='public final fun test1 (a: kotlin.Any, x: kotlin.collections.Collection<kotlin.Any>): kotlin.Boolean declared in <root>'
|
||||||
CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=null
|
CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=IN
|
||||||
$this: GET_VAR 'x: kotlin.collections.Collection<kotlin.Any> declared in <root>.test1' type=kotlin.collections.Collection<kotlin.Any> origin=null
|
$this: GET_VAR 'x: kotlin.collections.Collection<kotlin.Any> declared in <root>.test1' type=kotlin.collections.Collection<kotlin.Any> origin=null
|
||||||
element: GET_VAR 'a: kotlin.Any declared in <root>.test1' type=kotlin.Any origin=null
|
element: GET_VAR 'a: kotlin.Any declared in <root>.test1' type=kotlin.Any origin=null
|
||||||
FUN name:test2 visibility:public modality:FINAL <> (a:kotlin.Any, x:kotlin.collections.Collection<kotlin.Any>) returnType:kotlin.Boolean
|
FUN name:test2 visibility:public modality:FINAL <> (a:kotlin.Any, x:kotlin.collections.Collection<kotlin.Any>) returnType:kotlin.Boolean
|
||||||
@@ -13,7 +13,7 @@ FILE fqName:<root> fileName:/in.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='public final fun test2 (a: kotlin.Any, x: kotlin.collections.Collection<kotlin.Any>): kotlin.Boolean declared in <root>'
|
RETURN type=kotlin.Nothing from='public final fun test2 (a: kotlin.Any, x: kotlin.collections.Collection<kotlin.Any>): kotlin.Boolean declared in <root>'
|
||||||
CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=null
|
CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=null
|
||||||
$this: CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=null
|
$this: CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=IN
|
||||||
$this: GET_VAR 'x: kotlin.collections.Collection<kotlin.Any> declared in <root>.test2' type=kotlin.collections.Collection<kotlin.Any> origin=null
|
$this: GET_VAR 'x: kotlin.collections.Collection<kotlin.Any> declared in <root>.test2' type=kotlin.collections.Collection<kotlin.Any> origin=null
|
||||||
element: GET_VAR 'a: kotlin.Any declared in <root>.test2' type=kotlin.Any origin=null
|
element: GET_VAR 'a: kotlin.Any declared in <root>.test2' type=kotlin.Any origin=null
|
||||||
FUN name:test3 visibility:public modality:FINAL <T> (a:T of <root>.test3, x:kotlin.collections.Collection<T of <root>.test3>) returnType:kotlin.Boolean
|
FUN name:test3 visibility:public modality:FINAL <T> (a:T of <root>.test3, x:kotlin.collections.Collection<T of <root>.test3>) returnType:kotlin.Boolean
|
||||||
@@ -22,7 +22,7 @@ FILE fqName:<root> fileName:/in.kt
|
|||||||
VALUE_PARAMETER name:x index:1 type:kotlin.collections.Collection<T of <root>.test3>
|
VALUE_PARAMETER name:x index:1 type:kotlin.collections.Collection<T of <root>.test3>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='public final fun test3 <T> (a: T of <root>.test3, x: kotlin.collections.Collection<T of <root>.test3>): kotlin.Boolean declared in <root>'
|
RETURN type=kotlin.Nothing from='public final fun test3 <T> (a: T of <root>.test3, x: kotlin.collections.Collection<T of <root>.test3>): kotlin.Boolean declared in <root>'
|
||||||
CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=null
|
CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=IN
|
||||||
$this: GET_VAR 'x: kotlin.collections.Collection<T of <root>.test3> declared in <root>.test3' type=kotlin.collections.Collection<T of <root>.test3> origin=null
|
$this: GET_VAR 'x: kotlin.collections.Collection<T of <root>.test3> declared in <root>.test3' type=kotlin.collections.Collection<T of <root>.test3> origin=null
|
||||||
element: GET_VAR 'a: T of <root>.test3 declared in <root>.test3' type=T of <root>.test3 origin=null
|
element: GET_VAR 'a: T of <root>.test3 declared in <root>.test3' type=T of <root>.test3 origin=null
|
||||||
FUN name:test4 visibility:public modality:FINAL <T> (a:T of <root>.test4, x:kotlin.collections.Collection<T of <root>.test4>) returnType:kotlin.Boolean
|
FUN name:test4 visibility:public modality:FINAL <T> (a:T of <root>.test4, x:kotlin.collections.Collection<T of <root>.test4>) returnType:kotlin.Boolean
|
||||||
@@ -32,6 +32,6 @@ FILE fqName:<root> fileName:/in.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='public final fun test4 <T> (a: T of <root>.test4, x: kotlin.collections.Collection<T of <root>.test4>): kotlin.Boolean declared in <root>'
|
RETURN type=kotlin.Nothing from='public final fun test4 <T> (a: T of <root>.test4, x: kotlin.collections.Collection<T of <root>.test4>): kotlin.Boolean declared in <root>'
|
||||||
CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=null
|
CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=null
|
||||||
$this: CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=null
|
$this: CALL 'public abstract fun contains (element: E of kotlin.collections.Collection): kotlin.Boolean [operator] declared in kotlin.collections.Collection' type=kotlin.Boolean origin=IN
|
||||||
$this: GET_VAR 'x: kotlin.collections.Collection<T of <root>.test4> declared in <root>.test4' type=kotlin.collections.Collection<T of <root>.test4> origin=null
|
$this: GET_VAR 'x: kotlin.collections.Collection<T of <root>.test4> declared in <root>.test4' type=kotlin.collections.Collection<T of <root>.test4> origin=null
|
||||||
element: GET_VAR 'a: T of <root>.test4 declared in <root>.test4' type=T of <root>.test4 origin=null
|
element: GET_VAR 'a: T of <root>.test4 declared in <root>.test4' type=T of <root>.test4 origin=null
|
||||||
|
|||||||
+2
-2
@@ -45,7 +45,7 @@ FILE fqName:<root> fileName:/when.kt
|
|||||||
GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.testWithSubject' type=kotlin.Any? origin=null
|
GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.testWithSubject' type=kotlin.Any? origin=null
|
||||||
then: CONST String type=kotlin.String value="!Number"
|
then: CONST String type=kotlin.String value="!Number"
|
||||||
BRANCH
|
BRANCH
|
||||||
if: CALL 'public final fun contains <T> (element: T of kotlin.collections.CollectionsKt.contains): kotlin.Boolean [operator] declared in kotlin.collections.CollectionsKt' type=kotlin.Boolean origin=null
|
if: CALL 'public final fun contains <T> (element: T of kotlin.collections.CollectionsKt.contains): kotlin.Boolean [operator] declared in kotlin.collections.CollectionsKt' type=kotlin.Boolean origin=IN
|
||||||
<T>: kotlin.Any?
|
<T>: kotlin.Any?
|
||||||
$receiver: CALL 'public final fun setOf <T> (): kotlin.collections.Set<T of kotlin.collections.SetsKt.setOf> [inline] declared in kotlin.collections.SetsKt' type=kotlin.collections.Set<kotlin.Nothing> origin=null
|
$receiver: CALL 'public final fun setOf <T> (): kotlin.collections.Set<T of kotlin.collections.SetsKt.setOf> [inline] declared in kotlin.collections.SetsKt' type=kotlin.collections.Set<kotlin.Nothing> origin=null
|
||||||
<T>: kotlin.Nothing
|
<T>: kotlin.Nothing
|
||||||
@@ -78,7 +78,7 @@ FILE fqName:<root> fileName:/when.kt
|
|||||||
GET_VAR 'x: kotlin.Any? declared in <root>.test' type=kotlin.Any? origin=null
|
GET_VAR 'x: kotlin.Any? declared in <root>.test' type=kotlin.Any? origin=null
|
||||||
then: CONST String type=kotlin.String value="!Number"
|
then: CONST String type=kotlin.String value="!Number"
|
||||||
BRANCH
|
BRANCH
|
||||||
if: CALL 'public final fun contains <T> (element: T of kotlin.collections.CollectionsKt.contains): kotlin.Boolean [operator] declared in kotlin.collections.CollectionsKt' type=kotlin.Boolean origin=null
|
if: CALL 'public final fun contains <T> (element: T of kotlin.collections.CollectionsKt.contains): kotlin.Boolean [operator] declared in kotlin.collections.CollectionsKt' type=kotlin.Boolean origin=IN
|
||||||
<T>: kotlin.Number
|
<T>: kotlin.Number
|
||||||
$receiver: CALL 'public final fun setOf <T> (): kotlin.collections.Set<T of kotlin.collections.SetsKt.setOf> [inline] declared in kotlin.collections.SetsKt' type=kotlin.collections.Set<kotlin.Nothing> origin=null
|
$receiver: CALL 'public final fun setOf <T> (): kotlin.collections.Set<T of kotlin.collections.SetsKt.setOf> [inline] declared in kotlin.collections.SetsKt' type=kotlin.collections.Set<kotlin.Nothing> origin=null
|
||||||
<T>: kotlin.Nothing
|
<T>: kotlin.Nothing
|
||||||
|
|||||||
Reference in New Issue
Block a user