1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! The typed AST to IR walk: SSA construction and ABI-directed lowering.
//!
//! Design: `spec/08-ir.md`. Layer rank 9, see `spec/18-package-layout.md`.
//!
//! # What is here so far
//!
//! [`lower`], the walk from the typed tree to the IR, and [`Ssa`], the SSA construction by
//! Braun's algorithm that it drives: the thing that lets a local variable become a value
//! without ever having been a stack slot.
//!
//! The walk is in four files, one per level of the thing it walks. `unit` is the translation
//! unit: objects with static storage, their images, and the functions. `body` is one function:
//! the statements, the control flow, and the expressions. `repr` is the answer to what a C type
//! is once the IR is the one asking, and `abi` is the answer to how a call travels, which is the
//! target's rather than C's.
//!
//! What it does not build yet is reported rather than mislowered. An `asm` at file scope, a
//! `goto` in a function that has a variable length array in it and a `va_arg` that reads a
//! structure each become a diagnostic, so a program that uses one fails to compile rather than
//! compiling into something that is not what it says.
//!
//! Every crate in the workspace is published, and publishing implies a promise. This one is
//! tier 3: its Rust API is explicitly unstable and will change without a major version bump.
//! Depend on the `rucc` binary's behaviour, not on this.
pub use ;
pub use ;
/// The milestone in `spec/17-milestones.md` that fills this crate in.
pub const MILESTONE: &str = "M2";