Implement special desugaring for numeric comparisons in PSI2IR

This introduces the following IR built-in functions required for proper
implementation of the number comparisons:

- ieee754Equals(T, T): Boolean,
    for each T in {Float?, Double?}

- less(T, T): Boolean
  lessOrEqual(T, T): Boolean
  greater(T, T): Boolean
  greaterOrEqual(T, T): Boolean
    for each T in {Int, Long, Float, Double}
This commit is contained in:
Dmitry Petrov
2018-02-01 16:18:01 +03:00
parent f4ed4ec9d9
commit 9137e68d4e
33 changed files with 1566 additions and 233 deletions
+3 -4
View File
@@ -39,18 +39,17 @@ CONTENT
1 SET_VAR 'number: Int' type=kotlin.Unit origin=DIVEQ
2 GET_VAR 'number: Int' type=kotlin.Int origin=null
3 CONST Int type=kotlin.Int value=0
4 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 4, 5
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
BB 4
INCOMING <- BB 3
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
OUTGOING -> BB 1
Do..while entry: DO_WHILE label=null origin=DO_WHILE_LOOP
BB 5
INCOMING <- BB 3
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
OUTGOING -> BB 6
Do..while exit: DO_WHILE label=null origin=DO_WHILE_LOOP
+6 -8
View File
@@ -34,37 +34,35 @@ CONTENT
6 GET_VAR 'm: Int' type=kotlin.Int origin=null
7 CALL 'rem(Int): Int' type=kotlin.Int origin=PERC
8 CONST Int type=kotlin.Int value=0
9 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 3, 4
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
BB 3
INCOMING <- BB 2
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 CONTINUE label=null loop.label=null
OUTGOING -> BB 1
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
BB 4
INCOMING <- BB 2
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 SET_VAR 'sum: Int' type=kotlin.Unit origin=PLUSEQ
2 WHEN type=kotlin.Unit origin=null
3 GET_VAR 'sum: Int' type=kotlin.Int origin=null
4 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null
5 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 5, 6
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
BB 5
INCOMING <- BB 4
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 BREAK label=null loop.label=null
OUTGOING -> BB 8
While exit: WHILE label=null origin=FOR_LOOP_INNER_WHILE
BB 6
INCOMING <- BB 4
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
OUTGOING -> BB 1
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
+6 -8
View File
@@ -6,34 +6,32 @@ CONTENT
2 WHEN type=kotlin.Int origin=WHEN
3 GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
4 GET_VAR 'value-parameter y: Int' type=kotlin.Int origin=null
5 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 1, 3
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
BB 1
INCOMING <- BB 0
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
2 GET_VAR 'value-parameter y: Int' type=kotlin.Int origin=null
3 CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 2, 4
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
BB 2
INCOMING <- BB 1
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
CONTENT
OUTGOING -> BB 5
CONST Boolean type=kotlin.Boolean value=true
BB 3
INCOMING <- BB 0
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 CONST Int type=kotlin.Int value=1
OUTGOING -> BB 6
When exit: WHEN type=kotlin.Int origin=WHEN
BB 4
INCOMING <- BB 1
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 CONST Int type=kotlin.Int value=-1
OUTGOING -> BB 6
+3 -4
View File
@@ -6,18 +6,17 @@ CONTENT
2 WHEN type=kotlin.Int origin=null
3 GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
4 GET_VAR 'value-parameter y: Int' type=kotlin.Int origin=null
5 CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 1, 2
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
BB 1
INCOMING <- BB 0
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
OUTGOING -> BB 3
CONST Boolean type=kotlin.Boolean value=true
BB 2
INCOMING <- BB 0
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
OUTGOING -> BB 4
+18 -22
View File
@@ -7,19 +7,19 @@ CONTENT
3 GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
4 CONST Double type=kotlin.Double value=0.0
OUTGOING -> BB 1, 6
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 1
INCOMING <- BB 0
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 WHEN type=kotlin.Unit origin=null
2 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
3 CONST Double type=kotlin.Double value=0.0
OUTGOING -> BB 2, 3
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
BB 2
INCOMING <- BB 1
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 CONST Double type=kotlin.Double value=1.0
2 RETURN type=kotlin.Nothing from='minBiRoot(Double, Double, Double): Double'
@@ -27,7 +27,7 @@ OUTGOING -> NONE
Function exit: FUN name:minBiRoot visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double, c:kotlin.Double) returnType:Double flags:
BB 3
INCOMING <- BB 1
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 GET_VAR 'value-parameter c: Double' type=kotlin.Double origin=null
2 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
@@ -37,12 +37,11 @@ CONTENT
6 WHEN type=kotlin.Unit origin=null
7 GET_VAR 'bc: Double' type=kotlin.Double origin=null
8 CONST Double type=kotlin.Double value=0.0
9 CALL 'compareTo(Double): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 4, 5
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
BB 4
INCOMING <- BB 3
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 CONST Double type=kotlin.Double value=2.0
2 RETURN type=kotlin.Nothing from='minBiRoot(Double, Double, Double): Double'
@@ -50,7 +49,7 @@ OUTGOING -> NONE
Function exit: FUN name:minBiRoot visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double, c:kotlin.Double) returnType:Double flags:
BB 5
INCOMING <- BB 3
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 GET_VAR 'bc: Double' type=kotlin.Double origin=null
2 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
@@ -59,7 +58,7 @@ OUTGOING -> NONE
Function exit: FUN name:minBiRoot visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double, c:kotlin.Double) returnType:Double flags:
BB 6
INCOMING <- BB 0
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
CONTENT
1 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
2 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
@@ -74,12 +73,11 @@ CONTENT
11 WHEN type=kotlin.Unit origin=null
12 GET_VAR 'd: Double' type=kotlin.Double origin=null
13 CONST Double type=kotlin.Double value=0.0
14 CALL 'compareTo(Double): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 7, 8
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
BB 7
INCOMING <- BB 6
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 CONST Double type=kotlin.Double value=3.0
2 RETURN type=kotlin.Nothing from='minBiRoot(Double, Double, Double): Double'
@@ -87,7 +85,7 @@ OUTGOING -> NONE
Function exit: FUN name:minBiRoot visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double, c:kotlin.Double) returnType:Double flags:
BB 8
INCOMING <- BB 6
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
2 CALL 'unaryMinus(): Double' type=kotlin.Double origin=UMINUS
@@ -110,18 +108,17 @@ CONTENT
19 WHEN type=kotlin.Double origin=null
20 GET_VAR 'y1: Double' type=kotlin.Double origin=null
21 GET_VAR 'y2: Double' type=kotlin.Double origin=null
22 CALL 'compareTo(Double): Int' type=kotlin.Int origin=GT
OUTGOING -> BB 9, 10
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Double, Double): Boolean' type=kotlin.Boolean origin=GT
BB 9
INCOMING <- BB 8
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Double, Double): Boolean' type=kotlin.Boolean origin=GT
CONTENT
OUTGOING -> BB 11
CONST Boolean type=kotlin.Boolean value=true
BB 10
INCOMING <- BB 8
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Double, Double): Boolean' type=kotlin.Boolean origin=GT
CONTENT
1 GET_VAR 'y1: Double' type=kotlin.Double origin=null
OUTGOING -> BB 12
@@ -141,18 +138,17 @@ CONTENT
2 WHEN type=kotlin.Double origin=null
3 GET_VAR 'y3: Double' type=kotlin.Double origin=null
4 CONST Double type=kotlin.Double value=0.0
5 CALL 'compareTo(Double): Int' type=kotlin.Int origin=LT
OUTGOING -> BB 13, 14
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
BB 13
INCOMING <- BB 12
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
CONTENT
OUTGOING -> BB 15
CONST Boolean type=kotlin.Boolean value=true
BB 14
INCOMING <- BB 12
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
CONTENT
1 CONST Double type=kotlin.Double value=4.0
OUTGOING -> BB 16
@@ -119,10 +119,9 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
GET_VAR 'j: Int' type=kotlin.Int origin=PREFIX_INCR
condition: WHEN type=kotlin.Boolean origin=null
BRANCH
if: CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=GTEQ
$this: GET_VAR 'j: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=3
if: CALL 'greaterOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: GET_VAR 'j: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=3
then: CONST Boolean type=kotlin.Boolean value=false
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -133,4 +132,3 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
arg0: GET_VAR 'i: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=3
then: BREAK label=null loop.label=Outer
@@ -27,42 +27,45 @@ FILE fqName:<root> fileName:/conventionComparisons.kt
VALUE_PARAMETER name:a2 index:1 type:IA flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1(IA, IA) on IB: Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(IA) on IA: Int' type=kotlin.Int origin=GT
$this: GET_VAR 'this@test1: IB' type=IB origin=null
$receiver: GET_VAR 'value-parameter a1: IA' type=IA origin=null
other: GET_VAR 'value-parameter a2: IA' type=IA origin=null
arg1: CONST Int type=kotlin.Int value=0
FUN name:test2 visibility:public modality:FINAL <> ($receiver:IB, a1:IA, a2:IA) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:IB flags:
VALUE_PARAMETER name:a1 index:0 type:IA flags:
VALUE_PARAMETER name:a2 index:1 type:IA flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2(IA, IA) on IB: Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
CALL 'greaterOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(IA) on IA: Int' type=kotlin.Int origin=GTEQ
$this: GET_VAR 'this@test2: IB' type=IB origin=null
$receiver: GET_VAR 'value-parameter a1: IA' type=IA origin=null
other: GET_VAR 'value-parameter a2: IA' type=IA origin=null
arg1: CONST Int type=kotlin.Int value=0
FUN name:test3 visibility:public modality:FINAL <> ($receiver:IB, a1:IA, a2:IA) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:IB flags:
VALUE_PARAMETER name:a1 index:0 type:IA flags:
VALUE_PARAMETER name:a2 index:1 type:IA flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3(IA, IA) on IB: Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(IA) on IA: Int' type=kotlin.Int origin=LT
$this: GET_VAR 'this@test3: IB' type=IB origin=null
$receiver: GET_VAR 'value-parameter a1: IA' type=IA origin=null
other: GET_VAR 'value-parameter a2: IA' type=IA origin=null
arg1: CONST Int type=kotlin.Int value=0
FUN name:test4 visibility:public modality:FINAL <> ($receiver:IB, a1:IA, a2:IA) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:IB flags:
VALUE_PARAMETER name:a1 index:0 type:IA flags:
VALUE_PARAMETER name:a2 index:1 type:IA flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4(IA, IA) on IB: Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
CALL 'lessOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(IA) on IA: Int' type=kotlin.Int origin=LTEQ
$this: GET_VAR 'this@test4: IB' type=IB origin=null
$receiver: GET_VAR 'value-parameter a1: IA' type=IA origin=null
other: GET_VAR 'value-parameter a2: IA' type=IA origin=null
arg1: CONST Int type=kotlin.Int value=0
@@ -0,0 +1,3 @@
fun testD(x: Comparable<Double>, y: Comparable<Double>) = x is Double && y is Double && x < y
fun testF(x: Comparable<Float>, y: Comparable<Float>) = x is Float && y is Float && x < y
@@ -0,0 +1,49 @@
FILE fqName:<root> fileName:/comparableWithDoubleOrFloat.kt
FUN name:testD visibility:public modality:FINAL <> (x:kotlin.Comparable<kotlin.Double>, y:kotlin.Comparable<kotlin.Double>) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Comparable<kotlin.Double> flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Comparable<kotlin.Double> flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testD(Comparable<Double>, Comparable<Double>): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Comparable<Double>' type=kotlin.Comparable<kotlin.Double> origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Comparable<Double>' type=kotlin.Comparable<kotlin.Double> origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Comparable<Double>' type=kotlin.Comparable<kotlin.Double> origin=null
arg1: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Comparable<Double>' type=kotlin.Comparable<kotlin.Double> origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testF visibility:public modality:FINAL <> (x:kotlin.Comparable<kotlin.Float>, y:kotlin.Comparable<kotlin.Float>) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Comparable<kotlin.Float> flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Comparable<kotlin.Float> flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testF(Comparable<Float>, Comparable<Float>): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Comparable<Float>' type=kotlin.Comparable<kotlin.Float> origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Comparable<Float>' type=kotlin.Comparable<kotlin.Float> origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'less(Float, Float): Boolean' type=kotlin.Boolean origin=LT
arg0: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Comparable<Float>' type=kotlin.Comparable<kotlin.Float> origin=null
arg1: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Comparable<Float>' type=kotlin.Comparable<kotlin.Float> origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -0,0 +1,14 @@
fun test1d(x: Double, y: Double) = x.compareTo(y)
fun test2d(x: Double, y: Any) = y is Double && x.compareTo(y) == 0
fun test3d(x: Any, y: Any) = x is Double && y is Double && x.compareTo(y) == 0
fun test1f(x: Float, y: Float) = x.compareTo(y)
fun test2f(x: Float, y: Any) = y is Float && x.compareTo(y) == 0
fun test3f(x: Any, y: Any) = x is Float && y is Float && x.compareTo(y) == 0
fun testFD(x: Any, y: Any) = x is Float && y is Double && x.compareTo(y) == 0
fun testDF(x: Any, y: Any) = x is Double && y is Float && x.compareTo(y) == 0
fun Float.test1fr(x: Float) = compareTo(x)
fun Float.test2fr(x: Any) = x is Float && compareTo(x) == 0
fun Float.test3fr(x: Any) = x is Double && compareTo(x) == 0
@@ -0,0 +1,201 @@
FILE fqName:<root> fileName:/floatingPointCompareTo.kt
FUN name:test1d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double) returnType:Int flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1d(Double, Double): Int'
CALL 'compareTo(Double): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter y: Double' type=kotlin.Double origin=null
FUN name:test2d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2d(Double, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
other: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test3d visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3d(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=null
$this: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test1f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float) returnType:Int flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1f(Float, Float): Int'
CALL 'compareTo(Float): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter y: Float' type=kotlin.Float origin=null
FUN name:test2f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2f(Float, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
other: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test3f visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3f(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testFD visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testFD(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testDF visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDF(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=null
$this: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test1fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Float) returnType:Int flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1fr(Float) on Float: Int'
CALL 'compareTo(Float): Int' type=kotlin.Int origin=null
$this: GET_VAR 'this@test1fr: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
FUN name:test2fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Any) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2fr(Any) on Float: Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=null
$this: GET_VAR 'this@test2fr: Float' type=kotlin.Float origin=null
other: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test3fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Any) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3fr(Any) on Float: Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=null
$this: GET_VAR 'this@test3fr: Float' type=kotlin.Float origin=null
other: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -0,0 +1,18 @@
fun test1d(x: Double, y: Double) = x == y
fun test2d(x: Double, y: Double?) = x == y
fun test3d(x: Double, y: Any) = x == y
fun test4d(x: Double, y: Number) = x == y
fun test5d(x: Double, y: Any) = y is Double && x == y
fun test6d(x: Any, y: Any) = x is Double && y is Double && x == y
fun test1f(x: Float, y: Float) = x == y
fun test2f(x: Float, y: Float?) = x == y
fun test3f(x: Float, y: Any) = x == y
fun test4f(x: Float, y: Number) = x == y
fun test5f(x: Float, y: Any) = y is Float && x == y
fun test6f(x: Any, y: Any) = x is Float && y is Float && x == y
// The following possibly should not compile (but so far it does)
// because of EQUALITY_NOT_APPLICABLE.
fun testFD(x: Any, y: Any) = x is Float && y is Double && x == y
fun testDF(x: Any, y: Any) = x is Double && y is Float && x == y
@@ -0,0 +1,195 @@
FILE fqName:<root> fileName:/floatingPointEqeq.kt
FUN name:test1d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1d(Double, Double): Boolean'
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Double' type=kotlin.Double origin=null
FUN name:test2d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2d(Double, Double?): Boolean'
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Double?' type=kotlin.Double? origin=null
FUN name:test3d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3d(Double, Any): Boolean'
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
FUN name:test4d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Number) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Number flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4d(Double, Number): Boolean'
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Number' type=kotlin.Number origin=null
FUN name:test5d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5d(Double, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test6d visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test6d(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test1f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1f(Float, Float): Boolean'
CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Float' type=kotlin.Float origin=null
FUN name:test2f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2f(Float, Float?): Boolean'
CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Float?' type=kotlin.Float? origin=null
FUN name:test3f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3f(Float, Any): Boolean'
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
FUN name:test4f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Number) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Number flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4f(Float, Number): Boolean'
CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Number' type=kotlin.Number origin=null
FUN name:test5f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5f(Float, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: TYPE_OP type=kotlin.Float? origin=IMPLICIT_CAST typeOperand=kotlin.Float?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test6f visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test6f(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: TYPE_OP type=kotlin.Float? origin=IMPLICIT_CAST typeOperand=kotlin.Float?
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Float? origin=IMPLICIT_CAST typeOperand=kotlin.Float?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testFD visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testFD(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testDF visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDF(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -0,0 +1,23 @@
fun test1d(x: Double, y: Double) = x.equals(y)
fun test2d(x: Double, y: Double?) = x.equals(y)
fun test3d(x: Double, y: Any) = x.equals(y)
fun test4d(x: Double, y: Number) = x.equals(y)
fun test5d(x: Double, y: Any) = y is Double && x.equals(y)
fun test6d(x: Any, y: Any) = x is Double && y is Double && x.equals(y)
fun test1f(x: Float, y: Float) = x.equals(y)
fun test2f(x: Float, y: Float?) = x.equals(y)
fun test3f(x: Float, y: Any) = x.equals(y)
fun test4f(x: Float, y: Number) = x.equals(y)
fun test5f(x: Float, y: Any) = y is Float && x.equals(y)
fun test6f(x: Any, y: Any) = x is Float && y is Float && x.equals(y)
fun testFD(x: Any, y: Any) = x is Float && y is Double && x.equals(y)
fun testDF(x: Any, y: Any) = x is Double && y is Float && x.equals(y)
fun Float.test1fr(x: Float) = equals(x)
fun Float.test2fr(x: Float?) = equals(x)
fun Float.test3fr(x: Any) = equals(x)
fun Float.test4fr(x: Number) = equals(x)
fun Float.test5fr(x: Any) = x is Float && equals(x)
fun Float.test6fr(x: Any) = x is Double && equals(x)
@@ -0,0 +1,245 @@
FILE fqName:<root> fileName:/floatingPointEquals.kt
FUN name:test1d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1d(Double, Double): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter y: Double' type=kotlin.Double origin=null
FUN name:test2d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2d(Double, Double?): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter y: Double?' type=kotlin.Double? origin=null
FUN name:test3d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3d(Double, Any): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
FUN name:test4d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Number) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Number flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4d(Double, Number): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter y: Number' type=kotlin.Number origin=null
FUN name:test5d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5d(Double, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test6d visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test6d(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test1f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1f(Float, Float): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter y: Float' type=kotlin.Float origin=null
FUN name:test2f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2f(Float, Float?): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter y: Float?' type=kotlin.Float? origin=null
FUN name:test3f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3f(Float, Any): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
FUN name:test4f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Number) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Number flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4f(Float, Number): Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter y: Number' type=kotlin.Number origin=null
FUN name:test5f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5f(Float, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test6f visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test6f(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testFD visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testFD(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testDF visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDF(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
other: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test1fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Float) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1fr(Float) on Float: Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'this@test1fr: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
FUN name:test2fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Float?) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2fr(Float?) on Float: Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'this@test2fr: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter x: Float?' type=kotlin.Float? origin=null
FUN name:test3fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Any) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3fr(Any) on Float: Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'this@test3fr: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
FUN name:test4fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Number) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Number flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4fr(Number) on Float: Boolean'
CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'this@test4fr: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter x: Number' type=kotlin.Number origin=null
FUN name:test5fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Any) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5fr(Any) on Float: Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'this@test5fr: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test6fr visibility:public modality:FINAL <> ($receiver:kotlin.Float, x:kotlin.Any) returnType:Boolean flags:
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Float flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test6fr(Any) on Float: Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: CALL 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'this@test6fr: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -0,0 +1,18 @@
fun test1d(x: Double, y: Double) = x != y
fun test2d(x: Double, y: Double?) = x != y
fun test3d(x: Double, y: Any) = x != y
fun test4d(x: Double, y: Number) = x != y
fun test5d(x: Double, y: Any) = y is Double && x != y
fun test6d(x: Any, y: Any) = x is Double && y is Double && x != y
fun test1f(x: Float, y: Float) = x != y
fun test2f(x: Float, y: Float?) = x != y
fun test3f(x: Float, y: Any) = x != y
fun test4f(x: Float, y: Number) = x != y
fun test5f(x: Float, y: Any) = y is Float && x != y
fun test6f(x: Any, y: Any) = x is Float && y is Float && x != y
// The following possibly should not compile (but so far it does)
// because of EQUALITY_NOT_APPLICABLE.
fun testFD(x: Any, y: Any) = x is Float && y is Double && x != y
fun testDF(x: Any, y: Any) = x is Double && y is Float && x != y
@@ -0,0 +1,209 @@
FILE fqName:<root> fileName:/floatingPointExcleq.kt
FUN name:test1d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1d(Double, Double): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Double' type=kotlin.Double origin=null
FUN name:test2d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2d(Double, Double?): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Double?' type=kotlin.Double? origin=null
FUN name:test3d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3d(Double, Any): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
FUN name:test4d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Number) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Number flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4d(Double, Number): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Number' type=kotlin.Number origin=null
FUN name:test5d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5d(Double, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test6d visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test6d(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test1f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1f(Float, Float): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Float' type=kotlin.Float origin=null
FUN name:test2f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2f(Float, Float?): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Float?' type=kotlin.Float? origin=null
FUN name:test3f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3f(Float, Any): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
FUN name:test4f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Number) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Number flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4f(Float, Number): Boolean'
CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Number' type=kotlin.Number origin=null
FUN name:test5f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5f(Float, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: TYPE_OP type=kotlin.Float? origin=IMPLICIT_CAST typeOperand=kotlin.Float?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test6f visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test6f(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Float?, Float?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: TYPE_OP type=kotlin.Float? origin=IMPLICIT_CAST typeOperand=kotlin.Float?
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Float? origin=IMPLICIT_CAST typeOperand=kotlin.Float?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testFD visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testFD(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testDF visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDF(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: TYPE_OP type=kotlin.Double? origin=IMPLICIT_CAST typeOperand=kotlin.Double?
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -0,0 +1,10 @@
fun test1d(x: Double, y: Double) = x < y
fun test2d(x: Double, y: Any) = y is Double && x < y
fun test3d(x: Any, y: Any) = x is Double && y is Double && x < y
fun test1f(x: Float, y: Float) = x < y
fun test2f(x: Float, y: Any) = y is Float && x < y
fun test3f(x: Any, y: Any) = x is Float && y is Float && x < y
fun testFD(x: Any, y: Any) = x is Float && y is Double && x < y
fun testDF(x: Any, y: Any) = x is Double && y is Float && x < y
@@ -0,0 +1,147 @@
FILE fqName:<root> fileName:/floatingPointLess.kt
FUN name:test1d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1d(Double, Double): Boolean'
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter y: Double' type=kotlin.Double origin=null
FUN name:test2d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2d(Double, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter x: Double' type=kotlin.Double origin=null
arg1: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test3d visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3d(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test1f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1f(Float, Float): Boolean'
CALL 'less(Float, Float): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter y: Float' type=kotlin.Float origin=null
FUN name:test2f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2f(Float, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
then: CALL 'less(Float, Float): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter x: Float' type=kotlin.Float origin=null
arg1: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:test3f visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3f(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'less(Float, Float): Boolean' type=kotlin.Boolean origin=LT
arg0: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testFD visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testFD(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testDF visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDF(Any, Any): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: TYPE_OP type=kotlin.Double origin=IMPLICIT_CAST typeOperand=kotlin.Double
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
arg1: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -0,0 +1,2 @@
fun test(x: Any?, y: Double) =
x is Int && x < y
@@ -0,0 +1,18 @@
FILE fqName:<root> fileName:/nullableAnyAsIntToDouble.kt
FUN name:test visibility:public modality:FINAL <> (x:kotlin.Any?, y:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Any? flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test(Any?, Double): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Int
GET_VAR 'value-parameter x: Any?' type=kotlin.Any? origin=null
then: CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Int origin=IMPLICIT_CAST typeOperand=kotlin.Int
GET_VAR 'value-parameter x: Any?' type=kotlin.Any? origin=null
arg1: GET_VAR 'value-parameter y: Double' type=kotlin.Double origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -0,0 +1,3 @@
fun testDD(x: Double?, y: Double?) = x == y
fun testDF(x: Double?, y: Any?) = y is Float? && x == y
fun testDI(x: Double?, y: Any?) = y is Int? && x == y
@@ -0,0 +1,43 @@
FILE fqName:<root> fileName:/nullableFloatingPointEqeq.kt
FUN name:testDD visibility:public modality:FINAL <> (x:kotlin.Double?, y:kotlin.Double?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double? flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Double? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDD(Double?, Double?): Boolean'
CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double?' type=kotlin.Double? origin=null
arg1: GET_VAR 'value-parameter y: Double?' type=kotlin.Double? origin=null
FUN name:testDF visibility:public modality:FINAL <> (x:kotlin.Double?, y:kotlin.Any?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double? flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDF(Double?, Any?): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float?
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double?' type=kotlin.Double? origin=null
arg1: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Float origin=IMPLICIT_CAST typeOperand=kotlin.Float
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
FUN name:testDI visibility:public modality:FINAL <> (x:kotlin.Double?, y:kotlin.Any?) returnType:Boolean flags:
VALUE_PARAMETER name:x index:0 type:kotlin.Double? flags:
VALUE_PARAMETER name:y index:1 type:kotlin.Any? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='testDI(Double?, Any?): Boolean'
WHEN type=kotlin.Boolean origin=ANDAND
BRANCH
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Int?
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double?' type=kotlin.Double? origin=null
arg1: CALL 'toDouble(): Double' type=kotlin.Double origin=null
$this: TYPE_OP type=kotlin.Int origin=IMPLICIT_CAST typeOperand=kotlin.Int
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
@@ -57,11 +57,10 @@ FILE fqName:<root> fileName:/forWithImplicitReceivers.kt
$receiver: VALUE_PARAMETER name:<this> type:IntCell flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='hasNext() on IntCell: Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
$this: CALL '<get-value>(): Int' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'this@hasNext: IntCell' type=IntCell origin=null
other: CONST Int type=kotlin.Int value=0
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL '<get-value>(): Int' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'this@hasNext: IntCell' type=IntCell origin=null
arg1: CONST Int type=kotlin.Int value=0
FUN name:next visibility:public modality:OPEN <> ($this:IReceiver, $receiver:IntCell) returnType:Int flags:
$this: VALUE_PARAMETER name:<this> type:IReceiver flags:
$receiver: VALUE_PARAMETER name:<this> type:IntCell flags:
@@ -106,4 +105,3 @@ FILE fqName:<root> fileName:/forWithImplicitReceivers.kt
BLOCK type=kotlin.Unit origin=null
CALL 'println(Int): Unit' type=kotlin.Unit origin=null
message: GET_VAR 'i: Int' type=kotlin.Int origin=null
+6 -9
View File
@@ -5,18 +5,15 @@ FILE fqName:<root> fileName:/ifElseIf.kt
RETURN type=kotlin.Nothing from='test(Int): Int'
WHEN type=kotlin.Int origin=WHEN
BRANCH
if: CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
$this: GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=0
if: CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
arg0: GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=0
then: CONST Int type=kotlin.Int value=1
BRANCH
if: CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=0
if: CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=0
then: CONST Int type=kotlin.Int value=-1
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Int type=kotlin.Int value=0
@@ -4,215 +4,206 @@ FILE fqName:<root> fileName:/primitiveComparisons.kt
VALUE_PARAMETER name:b index:1 type:kotlin.Byte flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='btest1(Byte, Byte): Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Byte): Int' type=kotlin.Int origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Byte' type=kotlin.Byte origin=null
other: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
FUN name:btest2 visibility:public modality:FINAL <> (a:kotlin.Byte, b:kotlin.Byte) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Byte flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Byte flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='btest2(Byte, Byte): Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Byte): Int' type=kotlin.Int origin=LT
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Byte' type=kotlin.Byte origin=null
other: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
FUN name:btest3 visibility:public modality:FINAL <> (a:kotlin.Byte, b:kotlin.Byte) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Byte flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Byte flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='btest3(Byte, Byte): Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(Byte): Int' type=kotlin.Int origin=GTEQ
CALL 'greaterOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Byte' type=kotlin.Byte origin=null
other: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
FUN name:btest4 visibility:public modality:FINAL <> (a:kotlin.Byte, b:kotlin.Byte) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Byte flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Byte flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='btest4(Byte, Byte): Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(Byte): Int' type=kotlin.Int origin=LTEQ
CALL 'lessOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Byte' type=kotlin.Byte origin=null
other: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Byte' type=kotlin.Byte origin=null
FUN name:stest1 visibility:public modality:FINAL <> (a:kotlin.Short, b:kotlin.Short) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Short flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Short flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='stest1(Short, Short): Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Short): Int' type=kotlin.Int origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Short' type=kotlin.Short origin=null
other: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
FUN name:stest2 visibility:public modality:FINAL <> (a:kotlin.Short, b:kotlin.Short) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Short flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Short flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='stest2(Short, Short): Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Short): Int' type=kotlin.Int origin=LT
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Short' type=kotlin.Short origin=null
other: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
FUN name:stest3 visibility:public modality:FINAL <> (a:kotlin.Short, b:kotlin.Short) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Short flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Short flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='stest3(Short, Short): Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(Short): Int' type=kotlin.Int origin=GTEQ
CALL 'greaterOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Short' type=kotlin.Short origin=null
other: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
FUN name:stest4 visibility:public modality:FINAL <> (a:kotlin.Short, b:kotlin.Short) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Short flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Short flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='stest4(Short, Short): Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(Short): Int' type=kotlin.Int origin=LTEQ
CALL 'lessOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter a: Short' type=kotlin.Short origin=null
other: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
arg1: CALL 'toInt(): Int' type=kotlin.Int origin=null
$this: GET_VAR 'value-parameter b: Short' type=kotlin.Short origin=null
FUN name:itest1 visibility:public modality:FINAL <> (a:kotlin.Int, b:kotlin.Int) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Int flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Int flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='itest1(Int, Int): Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=GT
$this: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
other: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
arg0: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
arg1: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
FUN name:itest2 visibility:public modality:FINAL <> (a:kotlin.Int, b:kotlin.Int) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Int flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Int flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='itest2(Int, Int): Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
other: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
arg1: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
FUN name:itest3 visibility:public modality:FINAL <> (a:kotlin.Int, b:kotlin.Int) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Int flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Int flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='itest3(Int, Int): Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=GTEQ
$this: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
other: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
CALL 'greaterOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
arg1: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
FUN name:itest4 visibility:public modality:FINAL <> (a:kotlin.Int, b:kotlin.Int) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Int flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Int flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='itest4(Int, Int): Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LTEQ
$this: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
other: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
CALL 'lessOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: GET_VAR 'value-parameter a: Int' type=kotlin.Int origin=null
arg1: GET_VAR 'value-parameter b: Int' type=kotlin.Int origin=null
FUN name:ltest1 visibility:public modality:FINAL <> (a:kotlin.Long, b:kotlin.Long) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Long flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Long flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ltest1(Long, Long): Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Long): Int' type=kotlin.Int origin=GT
$this: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
other: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
CALL 'greater(Long, Long): Boolean' type=kotlin.Boolean origin=GT
arg0: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
arg1: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
FUN name:ltest2 visibility:public modality:FINAL <> (a:kotlin.Long, b:kotlin.Long) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Long flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Long flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ltest2(Long, Long): Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Long): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
other: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
CALL 'less(Long, Long): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
arg1: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
FUN name:ltest3 visibility:public modality:FINAL <> (a:kotlin.Long, b:kotlin.Long) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Long flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Long flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ltest3(Long, Long): Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(Long): Int' type=kotlin.Int origin=GTEQ
$this: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
other: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
CALL 'greaterOrEqual(Long, Long): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
arg1: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
FUN name:ltest4 visibility:public modality:FINAL <> (a:kotlin.Long, b:kotlin.Long) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Long flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Long flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ltest4(Long, Long): Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(Long): Int' type=kotlin.Int origin=LTEQ
$this: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
other: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
CALL 'lessOrEqual(Long, Long): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: GET_VAR 'value-parameter a: Long' type=kotlin.Long origin=null
arg1: GET_VAR 'value-parameter b: Long' type=kotlin.Long origin=null
FUN name:ftest1 visibility:public modality:FINAL <> (a:kotlin.Float, b:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ftest1(Float, Float): Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=GT
$this: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
CALL 'greater(Float, Float): Boolean' type=kotlin.Boolean origin=GT
arg0: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
FUN name:ftest2 visibility:public modality:FINAL <> (a:kotlin.Float, b:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ftest2(Float, Float): Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
CALL 'less(Float, Float): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
FUN name:ftest3 visibility:public modality:FINAL <> (a:kotlin.Float, b:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ftest3(Float, Float): Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=GTEQ
$this: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
CALL 'greaterOrEqual(Float, Float): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
FUN name:ftest4 visibility:public modality:FINAL <> (a:kotlin.Float, b:kotlin.Float) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Float flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Float flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='ftest4(Float, Float): Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(Float): Int' type=kotlin.Int origin=LTEQ
$this: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
other: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
CALL 'lessOrEqual(Float, Float): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: GET_VAR 'value-parameter a: Float' type=kotlin.Float origin=null
arg1: GET_VAR 'value-parameter b: Float' type=kotlin.Float origin=null
FUN name:dtest1 visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='dtest1(Double, Double): Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=GT
$this: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
CALL 'greater(Double, Double): Boolean' type=kotlin.Boolean origin=GT
arg0: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
FUN name:dtest2 visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='dtest2(Double, Double): Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
FUN name:dtest3 visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='dtest3(Double, Double): Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=GTEQ
$this: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
CALL 'greaterOrEqual(Double, Double): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
FUN name:dtest4 visibility:public modality:FINAL <> (a:kotlin.Double, b:kotlin.Double) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.Double flags:
VALUE_PARAMETER name:b index:1 type:kotlin.Double flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='dtest4(Double, Double): Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(Double): Int' type=kotlin.Int origin=LTEQ
$this: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
other: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
CALL 'lessOrEqual(Double, Double): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: GET_VAR 'value-parameter a: Double' type=kotlin.Double origin=null
arg1: GET_VAR 'value-parameter b: Double' type=kotlin.Double origin=null
@@ -4,35 +4,38 @@ FILE fqName:<root> fileName:/stringComparisons.kt
VALUE_PARAMETER name:b index:1 type:kotlin.String flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1(String, String): Boolean'
CALL 'GT0(Int): Boolean' type=kotlin.Boolean origin=GT
CALL 'greater(Int, Int): Boolean' type=kotlin.Boolean origin=GT
arg0: CALL 'compareTo(String): Int' type=kotlin.Int origin=GT
$this: GET_VAR 'value-parameter a: String' type=kotlin.String origin=null
other: GET_VAR 'value-parameter b: String' type=kotlin.String origin=null
arg1: CONST Int type=kotlin.Int value=0
FUN name:test2 visibility:public modality:FINAL <> (a:kotlin.String, b:kotlin.String) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.String flags:
VALUE_PARAMETER name:b index:1 type:kotlin.String flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2(String, String): Boolean'
CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(String): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'value-parameter a: String' type=kotlin.String origin=null
other: GET_VAR 'value-parameter b: String' type=kotlin.String origin=null
arg1: CONST Int type=kotlin.Int value=0
FUN name:test3 visibility:public modality:FINAL <> (a:kotlin.String, b:kotlin.String) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.String flags:
VALUE_PARAMETER name:b index:1 type:kotlin.String flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3(String, String): Boolean'
CALL 'GTEQ0(Int): Boolean' type=kotlin.Boolean origin=GTEQ
CALL 'greaterOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=GTEQ
arg0: CALL 'compareTo(String): Int' type=kotlin.Int origin=GTEQ
$this: GET_VAR 'value-parameter a: String' type=kotlin.String origin=null
other: GET_VAR 'value-parameter b: String' type=kotlin.String origin=null
arg1: CONST Int type=kotlin.Int value=0
FUN name:test4 visibility:public modality:FINAL <> (a:kotlin.String, b:kotlin.String) returnType:Boolean flags:
VALUE_PARAMETER name:a index:0 type:kotlin.String flags:
VALUE_PARAMETER name:b index:1 type:kotlin.String flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4(String, String): Boolean'
CALL 'LTEQ0(Int): Boolean' type=kotlin.Boolean origin=LTEQ
CALL 'lessOrEqual(Int, Int): Boolean' type=kotlin.Boolean origin=LTEQ
arg0: CALL 'compareTo(String): Int' type=kotlin.Int origin=LTEQ
$this: GET_VAR 'value-parameter a: String' type=kotlin.String origin=null
other: GET_VAR 'value-parameter b: String' type=kotlin.String origin=null
arg1: CONST Int type=kotlin.Int value=0
+18 -25
View File
@@ -4,15 +4,13 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
VAR name:x type:kotlin.Int flags:var
CONST Int type=kotlin.Int value=0
WHILE label=null origin=WHILE_LOOP
condition: CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'x: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=0
condition: CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'x: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=0
WHILE label=null origin=WHILE_LOOP
condition: CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'x: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=5
condition: CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'x: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=5
body: TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp0 type:kotlin.Int flags:val
@@ -22,10 +20,9 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
$this: GET_VAR 'tmp0: Int' type=kotlin.Int origin=null
GET_VAR 'tmp0: Int' type=kotlin.Int origin=null
WHILE label=null origin=WHILE_LOOP
condition: CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'x: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=10
condition: CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'x: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=10
body: BLOCK type=kotlin.Unit origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_INCR
@@ -37,10 +34,9 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
GET_VAR 'tmp1: Int' type=kotlin.Int origin=null
BLOCK type=kotlin.Unit origin=null
DO_WHILE label=null origin=DO_WHILE_LOOP
condition: CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'x: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=0
condition: CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'x: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=0
BLOCK type=kotlin.Unit origin=null
DO_WHILE label=null origin=DO_WHILE_LOOP
body: TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
@@ -51,10 +47,9 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
CALL 'inc(): Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'tmp2: Int' type=kotlin.Int origin=null
GET_VAR 'tmp2: Int' type=kotlin.Int origin=null
condition: CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'x: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=15
condition: CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'x: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=15
BLOCK type=kotlin.Unit origin=null
DO_WHILE label=null origin=DO_WHILE_LOOP
body: COMPOSITE type=kotlin.Unit origin=null
@@ -66,10 +61,9 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
CALL 'inc(): Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'tmp3: Int' type=kotlin.Int origin=null
GET_VAR 'tmp3: Int' type=kotlin.Int origin=null
condition: CALL 'LT0(Int): Boolean' type=kotlin.Boolean origin=LT
arg0: CALL 'compareTo(Int): Int' type=kotlin.Int origin=LT
$this: GET_VAR 'x: Int' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=20
condition: CALL 'less(Int, Int): Boolean' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'x: Int' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=20
FUN name:testSmartcastInCondition visibility:public modality:FINAL <> () returnType:Unit flags:
BLOCK_BODY
VAR name:a type:kotlin.Any? flags:val
@@ -88,4 +82,3 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
body: COMPOSITE type=kotlin.Unit origin=null
condition: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean
GET_VAR 'a: Any?' type=kotlin.Any? origin=null
+1 -2
View File
@@ -16,7 +16,7 @@ FILE fqName:<root> fileName:/coercionInLoop.kt
WHEN type=kotlin.Unit origin=null
BRANCH
if: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'get(Int): Double' type=kotlin.Double origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'a: DoubleArray' type=kotlin.DoubleArray origin=null
index: GET_VAR 'i: Int' type=kotlin.Int origin=null
@@ -36,4 +36,3 @@ FILE fqName:<root> fileName:/coercionInLoop.kt
GET_VAR 'tmp0: Int' type=kotlin.Int origin=null
RETURN type=kotlin.Nothing from='box(): String'
CONST String type=kotlin.String value=OK