1 //! Type-based states to represent code generation phases. 2 //! These states help enforce code generation invariants at compile time. 3 //! 4 //! Currently two phases are defined for code generation: 5 //! 6 //! * Prologue: responsible of setting up the function's frame. 7 //! * Emission: emission of Wasm code to machine code. 8 9 /// A code generation phase. 10 pub trait CodeGenPhase {} 11 12 /// The prologue phase. 13 /// 14 /// Its main responsibility is to setup the function's frame, by creating the 15 /// well known local slots. In this phase, writes to such slots is allowed. 16 /// After this phase, the frame is considered immutable. 17 pub struct Prologue; 18 /// The code emission phase. 19 /// 20 /// Its main responsibility is to emit Wasm code to machine code. 21 pub struct Emission; 22 23 impl CodeGenPhase for Prologue {} 24 impl CodeGenPhase for Emission {} 25