# Lower phase — L6 status (2026-10-05) Branch **`ast-stage-c`**. L6 = "classes/vtables, imports, nested modules". ## Landed **Nested modules** (`f82f72b`, tag `v3-lower6-nested`) - `CanDecl` accepts a nested `NkUnit` (with no imports). - `LowerDecls` emits the nested unit's declarations and, when it has a `BEGIN` body, `BeginInit`/body/`EndInit` (registering `_init` so the enclosing `BeginBody` calls it). - `ReenterGlobals` re-registers a nested module's non-exported globals in the still-open enclosing module scope, so `QbeGen.GlobalRef` resolves their `"_"` symbols after the nested scope has been popped. - `lower_ok t_nestedmod.mod` byte-matches. Suite 194/194; FIXPOINT OK (3,328,857 bytes). ## Blocked / remaining ### Imports — blocked by the session-image model `-lower` is invoked only from `ProgModule`'s END (`M2.atg`), so Lower re-emits **only the last unit**. But a session's image is accumulated across all units (`sessBuf`): a program that `IMPORT`s a module pulls that module's procs/init/globals into the *same* `gen_ssa/.ssa`. So re-emitting just the program cannot byte-match. Supporting imports therefore needs a **mechanism change**: lower *every* unit (definition/implementation/program) and accumulate a session image (mirroring `sessBuf`), or otherwise compare per unit. That is the same mechanism the **L7 flip** needs, so it is the natural next structural step. Qualified names (`M.x`) additionally need `SymTab.MaterializeAlias` at lowering time (module scope is open — workable) and qualified-call resolution in `LowerCall` (currently `CalleeName` reads only the base ident). ### Classes/vtables — large, single-unit, verifiable Surface: `NkClassDecl`/`NkFieldDecl`, `CLASS IMPLEMENTATION`, method binding (`obj.Method` + `ArmRecv`), virtual dispatch, inheritance, `NEW` for classes, vtables (`QbeGen.EmitVTables`), `THIS`. Independent of imports, so it can be byte-verified with `lower_ok` on a self-contained class program. ## Suggested order 1. Classes/vtables (verifiable now). 2. The per-unit lowering mechanism (unblocks imports and is the L7 prerequisite).