compound assignment operators are split during lowering. <<< main = fun () { var x int = 0 x += 1 x *= 2 x -= 3 } >>> (unit (types (type 0 int primitive) (type 1 uint primitive) (type 2 bool primitive) (type 3 string primitive) (type 4 float primitive) (type 5 byte primitive) (type 6 ascii primitive) (type 7 void primitive)) (functions (function 0 main main (returns (ref void)) (block (declaration x (ref int) (initializer (expr 0))) (assign (expr (name x)) (expr (binary + (expr (name x)) (expr 1)))) (assign (expr (name x)) (expr (binary * (expr (name x)) (expr 2)))) (assign (expr (name x)) (expr (binary - (expr (name x)) (expr 3)))) ))) (emission_order 0 1 2 3 4 5 6 7))