session-2026-09-19.md 3.1 KB

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

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).