compound assigns desugar to plain assignment + binary; increment and decrement (statement or expression position) keep their own ir node and emit `++` / `--` directly. <<< main = fun () { var x int = 0 x += 1 x *= 2 x++ x -= 3 x-- var y int = x++ var z int = ++x } >>> #include "core.c" void catskill_main(void); void catskill_main(void) { integer x = 0; x = x + 1; x = x * 2; x++; x = x - 3; x--; integer y = x++; integer z = ++x; } #include "runtime.c"