Split code generation into two passes (with duplication).
Split AST node classes into separate files.