== sum == tailrec fun sum(x: Long, sum: Long): Long { if (x == 0.toLong()) return sum return sum(x - 1, sum + x) } --------------------- L0: 1 v(x: Long) magic[FAKE_INITIALIZER](x: Long) -> w(x|) v(sum: Long) magic[FAKE_INITIALIZER](sum: Long) -> w(sum|) 2 mark({ if (x == 0.toLong()) return sum return sum(x - 1, sum + x) }) mark(if (x == 0.toLong()) return sum) r(x) -> mark(0.toLong()) r(0) -> mark(toLong()) call(toLong(), toLong|) -> mark(x == 0.toLong()) call(x == 0.toLong(), equals|, ) -> jf(L2|) NEXT:[read (Unit), r(sum) -> ] r(sum) -> ret(*|) L1 NEXT:[] - jmp(L3) NEXT:[merge(if (x == 0.toLong()) return sum|!) -> ] PREV:[] L2 [else branch]: read (Unit) PREV:[jf(L2|)] L3 ['if' expression result]: merge(if (x == 0.toLong()) return sum|!) -> r(x) -> r(1) -> mark(x - 1) call(x - 1, minus|, ) -> r(sum) -> r(x) -> mark(sum + x) call(sum + x, plus|, ) -> mark(sum(x - 1, sum + x)) call(sum(x - 1, sum + x), sum|, ) -> ret(*|) L1 L1: 1 NEXT:[] PREV:[ret(*|) L1, ret(*|) L1] error: PREV:[] sink: PREV:[, ] =====================