# stage2: implement function call inlining in the frontend · gitcafe/zig

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

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

Visibility: public

Requested revision: 9362f382ab7023592cc1d71044217b847b122406

Requested commit: 9362f382ab7023592cc1d71044217b847b122406

Commit: 9362f382ab7023592cc1d71044217b847b122406

Tree: 3587f4c88b949673a94e995367414d80a5ef68af

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
stage2: implement function call inlining in the frontend

 * remove the -Ddump-zir thing. that's handled through --verbose-ir
 * rework Fn to have an is_inline flag without requiring any more memory
   on the heap per function.
 * implement a rough first version of dumping typed zir (tzir) which is
   a lot more helpful for debugging than what we had before. We don't
   have a way to parse it though.
 * keep track of whether the inline-ness of a function changes because
   if it does we have to go update callsites.
 * add compile error for inline and export used together.

inline function calls and comptime function calls are implemented the
same way. A block instruction is set up to capture the result, and then
a scope is set up that has a flag for is_comptime and some state if the
scope is being inlined.

when analyzing `ret` instructions, zig looks for inlining state in the
scope, and if found, treats `ret` as a `break` instruction instead, with
the target block being the one set up at the inline callsite.

Follow-up items:
 * Complete out the debug TZIR dumping code.
 * Don't redundantly generate ZIR for each inline/comptime function
   call. Instead we should add a new state enum tag to Fn.
 * comptime and inlining branch quotas.
 * Add more test cases.

```

## Parents

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

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