# stage2: implement inline while · gitcafe/zig

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

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

Visibility: public

Requested revision: 31023de6c4b3957ef356be01b5454426844955a9

Requested commit: 31023de6c4b3957ef356be01b5454426844955a9

Commit: 31023de6c4b3957ef356be01b5454426844955a9

Tree: 7951b8c7265ace392bde49165b505762f1cc33e8

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
stage2: implement inline while

Introduce "inline" variants of ZIR tags:
 * block => block_inline
 * repeat => repeat_inline
 * break => break_inline
 * condbr => condbr_inline

The inline variants perform control flow at compile-time, and they
utilize the return value of `Sema.analyzeBody`.

`analyzeBody` now returns an Index, not a Ref, which is the ZIR index of
a break instruction. This effectively communicates both the intended
break target block as well as the operand, allowing parent blocks to
find out whether they, in turn, should return the break instruction up the
call stack, or accept the operand as the block's result and continue
analyzing instructions in the block.

Additionally:
 * removed the deprecated ZIR tag `block_comptime`.
 * removed `break_void_node` so that all break instructions use the same Data.
 * zir.Code: remove the `root_start` and `root_len` fields. There is now
   implied to be a block at index 0 for the root body. This is so that
   `break_inline` has something to point at and we no longer need the
   special instruction `break_flat`.
 * implement source location byteOffset() for .node_offset_if_cond
   .node_offset_for_cond is probably redundant and can be deleted.

We don't have `comptime var` supported yet, so this commit adds a test
that at least makes sure the condition is required to be comptime known
for `inline while`.

```

## Parents

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

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