single-pass compilation