# self-hosted: AST flattening, astgen improvements, result locations, and more · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/aac6e8c4182b5d70de27b1f325151ac4233ed912)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: aac6e8c4182b5d70de27b1f325151ac4233ed912

Requested commit: aac6e8c4182b5d70de27b1f325151ac4233ed912

Commit: aac6e8c4182b5d70de27b1f325151ac4233ed912

Tree: c745097fb669f9b7f8c21f0bdc264a7d20656d7a

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
self-hosted: AST flattening, astgen improvements, result locations, and more

 * AST: flatten ControlFlowExpression into Continue, Break, and Return.
 * AST: unify identifiers and literals into the same AST type: OneToken
 * AST: ControlFlowExpression uses TrailerFlags to optimize storage
   space.
 * astgen: support `var` as well as `const` locals, and support
   explicitly typed locals. Corresponding Module and codegen code is not
   implemented yet.
 * astgen: support result locations.
 * ZIR: add the following instructions (see the corresponding doc
   comments for explanations of semantics):
   - alloc
   - alloc_inferred
   - bitcast_result_ptr
   - coerce_result_block_ptr
   - coerce_result_ptr
   - coerce_to_ptr_elem
   - ensure_result_used
   - ensure_result_non_error
   - ret_ptr
   - ret_type
   - store
   - param_type
 * the skeleton structure for result locations is set up. It's looking
   pretty clean so far.
 * add compile error for unused result and compile error for discarding
   errors.
 * astgen: split builtin calls up to implemented manually, and implement
   `@as`, `@bitCast` (and others) with respect to result locations.
 * add CLI support for hex and raw object formats. They are not
   supported by the self-hosted compiler yet, and emit errors.
 * rename `--c` CLI to `-ofmt=[objectformat]` which can be any of the
   object formats. Only ELF and C are supported so far. Also added missing
   help to the help text.
 * Remove hard tabs from C backend test cases. Shame on you Noam, you
   are grounded, you should know better, etc. Bad boy.
 * Delete C backend code and test case that relied on comptime_int
   incorrectly making it all the way to codegen.

```

## Parents

- [b4d383a47876b794b3f0950151c7cdcd5eddfc7a](https://git.cafe/gitcafe/zig/commit/b4d383a47876b794b3f0950151c7cdcd5eddfc7a?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/aac6e8c4182b5d70de27b1f325151ac4233ed912?format=markdown)
