# Session save — 2026-09-19 (m2compiler-V3) ## Where we are HEAD: `1505ca8` — `v3-step1.11`, suite **35/35** (15 run + 20 reject). Repo: `/home/eric/Projets/Projets-Modula2/MyWork/m2compiler-V3`, no remote (push recipe in untracked `git.txt` → `http://git.yojik.eu/eric/M2compiler-V3.git`). Uncommitted right now: `docs/grammar.md` (fresh extraction, needs a commit decision). `git.txt` intentionally untracked. ## Tag lineage (all green at every tag) v3-step1 (5/5 integer pipeline) → 1.1 (scope-tree+BST symtab) → 1.2 (heap-allocated storage) → 1.3 (0x-only hex, a-f, E-exponents, `//`) → 1.4 (3 units, imports, opaque, nesting) → 1.5 (`file:line:col` console errors) → 1.6 (showcase1=50) → 1.7 (scalar TYPEs, headings, bodies, FORWARD) → 1.8 (showcase2=71) → 1.9 (statements+booleans, QBE block discipline) → 1.10 (Clarion classes + corrected OOP.txt sketch) → 1.11 (showcase4=44, showcase5=7×230 class frontier); v3-step2 (REAL lowering, scalar story complete); docs-only commits (OOP.txt ref, root README) untagged between 1.9 and 2. ## Grammar status (`compiler/src/M2.atg`, ~900 lines, LL(1) with one benign Coco warning in TypeBlock — verified correct codegen) Lowers: program modules; CONST/VAR/scalar TYPEs (named, subrange w/ folded literal bounds, enum declared); full scalar arith incl. REAL (`d`, swtof, cXXd); relations; eager AND/OR/NOT; IF/CASE (labels+ranges+ELSE, compare-chain)/WHILE/REPEAT/LOOP+EXIT/FOR-full-BY/ RETURN(232-checked). Parse-now+230: DEFINITION/IMPLEMENTATION, nesting (+EXPORT), proc bodies, FORWARD, enum use, classes (decl+single-inheritance+IMPLEMENTATION blocks+VIRTUAL). Still syntax errors: ARRAY/RECORD/SET/POINTER, WITH, IN, calls. ## Locked decisions (do not relitigate without cause) Classic idents (no `_`, R10 reserves leading `_`); `0x`-only hex; `#` only; `NOT/AND/OR` only; no `B/C`; unary minus at expr start only (Wirth); `;` method separators (example over sketch); single inheritance; every ARRAY = LONGCARD count + elements (inline, element counts, no NUL); UCHAR=32-bit + UString=count+ codepoints, UTF-8 edges, hard lex errors; self-host bar = byte-identical `.ssa` over 3 stages. Truncating DIV/MOD (`/` on ints too, Test2 parity). Eager booleans. Test2-compat QbeGen signatures kept for growth. ## Open threads / next = step 3 composites ARRAY/RECORD/SET/POINTER + length-prefixed layout + WITH + IN; `docs/plan.md` + `docs/summary_step3.md` (stub) hold the scope. Also pending: unmatched-FORWARD 231, fwd/body signature compare, CHAR-arith policy, enum lowering, LONGINT quads, sibling-method visibility (step 4 calls), class lowering (vtable/THIS), `0b` + digit separators, `grammar.md` regen hook in build.sh (offered, not done). A phantom `t_class` mid-session failure never reproduced — see `docs/summary_step1.10.md` §3; clean-rebuild first if anything similar appears. ## Resume commands ```sh cd /home/eric/Projets/Projets-Modula2/MyWork/m2compiler-V3/compiler ./build.sh && ./run_tests.sh # expect 35/35 ``` Then: interactive § statements for composites (ask which first: ARRAY+indexing, RECORD+WITH, SET+IN, POINTER).