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