Hi Mike,
quite a few stages:
1 line prep
2 translate to intermediate code
3 translate to intermediate code with unused code removal (#compact option)
4 translation to assembler
5 assembler to machine script
6 machine script to linked executable binary JIT code
7 binary to PE exe/dll
o2 no longer has a preprocessor (#preprocess option), but uses late, in-line expansion of macros and equates. So the macro stage is woven into stages 2 and 3, so to speak.