// a * b Call(*, [a, b], x1) // f(g(x + 1)) Call(+, [x, 1], x1) Call(g, [x2], x2) Call(f, [x3], x3) // { f(x); f(y); } Call(f, [x], x1) Call(f, [y], x2) // while a < b do f() L0 Call(<, [a, b], x1) CondJump(x1, L1, L2) L1 Call(f, [], x2) Jump(L0) L2