== Direction == enum class Direction { NORTH, SOUTH, WEST, EAST } --------------------- : {<: Direction} NEW: magic[FAKE_INITIALIZER](NORTH,) -> : {<: Direction} NEW: magic[FAKE_INITIALIZER](SOUTH,) -> : {<: Direction} NEW: magic[FAKE_INITIALIZER](WEST,) -> : {<: Direction} NEW: magic[FAKE_INITIALIZER](EAST) -> ===================== == foo == fun foo(dir: Direction): Int { val res: Int when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 } return res } --------------------- : {<: Direction} NEW: magic[FAKE_INITIALIZER](dir: Direction) -> : * NEW: magic[EXHAUSTIVE_WHEN_ELSE](when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }) -> dir : * NEW: r(dir) -> NORTH : * NEW: r(NORTH) -> Direction.NORTH : * COPY Direction.NORTH : * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.NORTH|, ) -> 1 : Int NEW: r(1) -> res = 1 !: * SOUTH : * NEW: r(SOUTH) -> Direction.SOUTH : * COPY Direction.SOUTH : * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.SOUTH|, ) -> 2 : Int NEW: r(2) -> res = 2 !: * WEST : * NEW: r(WEST) -> Direction.WEST : * COPY Direction.WEST : * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.WEST|, ) -> 3 : Int NEW: r(3) -> res = 3 !: * EAST : * NEW: r(EAST) -> Direction.EAST : * COPY Direction.EAST : * NEW: magic[EQUALS_IN_WHEN_CONDITION](Direction.EAST|, ) -> 4 : Int NEW: r(4) -> res = 4 !: * when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 } : * NEW: merge(when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 }|!, !, !, !) -> res : Int NEW: r(res) -> return res !: * { val res: Int when (dir) { Direction.NORTH -> res = 1 Direction.SOUTH -> res = 2 Direction.WEST -> res = 3 Direction.EAST -> res = 4 } return res } !: * COPY =====================