# V3 step 4 — procedures, modules, separate compilation (planned) Status: not started. Blaise multi-file equivalent. ## Scope - `PROCEDURE` (value/`VAR` params, function results, recursion, nested procedures with display), `RETURN` (232), `EXIT`/`LOOP`, `REPEAT`, `FOR..BY`, `CASE`, `WITH`. - `DEFINITION/IMPLEMENTATION` split, opaque `TYPE T;` + completion (V2 goal_step8 scope: usable only behind pointers/`VAR` formals outside the implementation), `IMPORT` name resolution (233). - Procedure-type variables deferred to step 6 unless trivial. ## Acceptance (planned) - ADT tests (counter/stack: New/Free/Use/Count ExitCodes) + rejection tests (client `VAR x:T`, field access, value param, opaque result, completion mismatch); suite green. ## Files (planned) - `compiler/src/M2.atg` § declarations/statements; `SymTab` scopes; `QbeGen` call frames (C-ABI: first 6 int args regs via QBE auto). - This file filled in on landing.