== sum == tailRecursive fun sum(x: Long, sum: Long): Long { if (x == 0.toLong()) return sum return sum(x - 1, sum + x) } --------------------- : Long NEW: magic[FAKE_INITIALIZER](x: Long) -> : Long NEW: magic[FAKE_INITIALIZER](sum: Long) -> x : OR{{<: Any}, {<: Any}} NEW: r(x) -> 0 : {<: Number} NEW: r(0) -> toLong() : * NEW: call(toLong(), toLong|) -> 0.toLong() : * COPY x == 0.toLong() : Boolean NEW: call(x == 0.toLong(), equals|, ) -> sum : Long NEW: r(sum) -> return sum !: * if (x == 0.toLong()) return sum : * NEW: merge(if (x == 0.toLong()) return sum|!) -> x : Long NEW: r(x) -> 1 : Int NEW: r(1) -> x - 1 : Long NEW: call(x - 1, minus|, ) -> sum : Long NEW: r(sum) -> x : Long NEW: r(x) -> sum + x : Long NEW: call(sum + x, plus|, ) -> sum(x - 1, sum + x) : Long NEW: call(sum(x - 1, sum + x), sum|, ) -> return sum(x - 1, sum + x) !: * { if (x == 0.toLong()) return sum return sum(x - 1, sum + x) } !: * COPY =====================