Coerce loop body to Unit.

This commit is contained in:
Dmitry Petrov
2016-09-21 12:33:37 +03:00
parent 291d535de7
commit 663eb21990
4 changed files with 64 additions and 0 deletions
@@ -0,0 +1,10 @@
fun box(): String {
val a = DoubleArray(5)
val x = a.iterator()
var i = 0
while (x.hasNext()) {
if (a[i] != x.next()) return "Fail $i"
i++
}
return "OK"
}
@@ -0,0 +1,37 @@
FILE /coercionInLoop.kt
FUN public fun box(): kotlin.String
BLOCK_BODY
VAR val a: kotlin.DoubleArray
CALL 'constructor DoubleArray(Int)' type=kotlin.DoubleArray origin=null
size: CONST Int type=kotlin.Int value='5'
VAR val x: kotlin.collections.DoubleIterator
CALL 'iterator(): DoubleIterator' type=kotlin.collections.DoubleIterator origin=null
$this: GET_VAR 'a: DoubleArray' type=kotlin.DoubleArray origin=null
VAR var i: kotlin.Int
CONST Int type=kotlin.Int value='0'
WHILE label=null origin=WHILE_LOOP
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=null
$this: GET_VAR 'x: DoubleIterator' type=kotlin.collections.DoubleIterator origin=null
body: TYPE_OP origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
WHEN type=kotlin.Unit origin=IF
if: CALL 'NOT(Boolean): Boolean' type=kotlin.Boolean origin=EXCLEQ
arg0: CALL 'EQEQ(Any?, Any?): 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
arg1: CALL 'next(): Double' type=kotlin.Double origin=null
$this: GET_VAR 'x: DoubleIterator' type=kotlin.collections.DoubleIterator origin=null
then: RETURN type=kotlin.Nothing from='box(): String'
STRING_CONCATENATION type=kotlin.String
CONST String type=kotlin.String value='Fail '
GET_VAR 'i: Int' type=kotlin.Int origin=null
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE val tmp0: kotlin.Int
GET_VAR 'i: Int' type=kotlin.Int origin=POSTFIX_INCR
SET_VAR 'i: Int' type=kotlin.Unit origin=POSTFIX_INCR
CALL 'inc(): Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'tmp0: Int' type=kotlin.Int origin=null
GET_VAR 'tmp0: Int' type=kotlin.Int origin=null
RETURN type=kotlin.Nothing from='box(): String'
CONST String type=kotlin.String value='OK'