# stage2: rework the C backend · gitcafe/zig

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

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

Visibility: public

Requested revision: 7b8cede61fc20c137aca4e02425536bfc9a5a400

Requested commit: 7b8cede61fc20c137aca4e02425536bfc9a5a400

Commit: 7b8cede61fc20c137aca4e02425536bfc9a5a400

Tree: 9533e4e3afb63e23ab5a42ecddb18b9998ec1237

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
stage2: rework the C backend

 * std.ArrayList gains `moveToUnmanaged` and dead code
   `ArrayListUnmanaged.appendWrite` is deleted.
 * emit_h state is attached to Module rather than Compilation.
 * remove the implementation of emit-h because it did not properly
   integrate with incremental compilation. I will re-implement it
   in a follow-up commit.
 * Compilation: use the .codegen_failure tag rather than
   .dependency_failure tag for when `bin_file.updateDecl` fails.

C backend:
 * Use a CValue tagged union instead of strings for C values.
 * Cleanly separate state into Object and DeclGen:
   - Object is present only when generating a .c file
   - DeclGen is present for both generating a .c and .h
 * Move some functions into their respective Object/DeclGen namespace.
 * Forward decls are managed by the incremental compilation frontend; C
   backend no longer renders function signatures based on callsites.
   For simplicity, all functions always get forward decls.
 * Constants are managed by the incremental compilation frontend. C
   backend no longer has a "constants" section.
 * Participate in incremental compilation. Each Decl gets an ArrayList
   for its generated C code and it is updated when the Decl is updated.
   During flush(), all these are joined together in the output file.
 * The new CValue tagged union is used to clean up using of assigning to
   locals without an additional pointer local.
 * Fix bug with bitcast of non-pointers making the memcpy destination
   immutable.

```

## Parents

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

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