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
@@ -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