Browse Source

docs: session save 2026-09-23 — step 8.2 (self-compile gaps, SymTab clean)

Eric Streit 2 tuần trước cách đây
mục cha
commit
0b6ffea8c5
1 tập tin đã thay đổi với 67 bổ sung và 0 xóa
  1. 67 0
      docs/session-2026-09-23-step8.2.md

+ 67 - 0
docs/session-2026-09-23-step8.2.md

@@ -0,0 +1,67 @@
+# Session save — 2026-09-23 (m2compiler-V3, step 8.2)
+
+## Where we are
+
+HEAD `bcf5d8a`. Tags `v3-step8.1`, `v3-step8.2` (+ `v3-step8-summary`).
+Suite **104/104**, build warning-free, tree clean, no remote
+(`git.txt` untracked). `SymTab` compiles clean under V3; `QbeGen` is
+close (two gaps below).
+
+## What this session did
+
+- **8.1 — Redux sweep + lenient imports.** Compiler sources swept
+  (`&`→`AND`, `~`→`NOT`, `<>`→`#`, octal `NNC`→`CHR(n)`); V3 accepts
+  `FROM SYSTEM IMPORT TSIZE` (built-ins win). `docs/summary_step8.1.md`.
+- **Blaise map refreshed** against their 11-phase plan; V3 = phases
+  1–2 done, phase 5 (self-hosting) in progress, phase 6 partial.
+  `docs/blaise-phases-map.md`.
+- **8.2 — self-compile gaps fixed.** `docs/summary_step8.2.md`:
+  1. Named-CONST constant folding (`SetSymVal`/`GetSymVal`,
+     `QbeGen.Fold2`; new test `t_constfold`).
+  2. Forward type refs in a `TYPE` block (`ForwardType` +
+     `Begin/EndTypeBlock`; reuses the opaque-alias `SetTarget` path).
+  3. Trailing `;` before a record `END`.
+  4. Qualified type names (`Module.Type` via `QualType`).
+  5. Capacities: `MaxTypes` 256→4096, `MaxPend` 64→256,
+     `MaxMods` 32→64 (256 descriptors was the biggest false wall).
+  6. Compact zero-filled array data `{ l n, z bytes }` in `ArrData`
+     (per-element emission of the 1 MB `sessBuf`/`nestBufs` was the
+     apparent hang).
+  7. `Resolve` moved before `PushClassScope` (ISO declaration order).
+
+## Measured state of self-compilation
+
+- `SymTab.def` + `SymTab.mod`: **clean** (verified with a stub
+  program; no `.ssa` expected — no module body).
+- `QbeGen.def` + `QbeGen.mod`: 124 errors, down from 465:
+  **85 `invalid call`, 38 undeclared, 1 `invalid Statement`**.
+
+## Remaining gaps (precisely identified)
+
+1. **Within-module forward procedure calls.** 10 callees defined
+   later in `QbeGen.mod`: `Revive`, `LocAdd`, `ResClass`, `HApp`,
+   `LocFindUp`, `UpAddrOf`, `AllocLocal`, `FlushStrings`, `HeapSize`,
+   `ArrData`. gm2 hoists; ISO needs declaration-before-use. Choice:
+   (a) add `FORWARD` decls / reorder the source, or (b) make V3
+   resolve later-declared module procedures.
+2. **Single-char string literals.** `"0"`/`"$"`/`"-"` are typed
+   `CHAR`, so passing them to `ARRAY OF CHAR` formals
+   (`Cpy(d, "0")`) reports "invalid call". Needs a CHAR ↔ length-1
+   string coercion model.
+
+Then: cross-stage `FileIO` selection and `bootstrap/fixpoint.sh`
+(Stage1 gm2 → Stage2 V3 → Stage3 V3, byte-identical `.ssa`, suite
+green on all stages; rolling-bootstrap design per the Blaise map).
+
+## Resume commands
+
+```sh
+cd /home/eric/Projets/Projets-Modula2/MyWork/m2compiler-V3/compiler
+./build.sh && ./run_tests.sh          # expect 104/104, no gm2 warnings
+# gap check:
+./M2 ../stdlib/storage.def ../stdlib/storage.mod \
+     ../runtime/syslib/SysShim.def ../runtime/syslib/SysShim.mod \
+     ../runtime/syslib/FileIO.def ../runtime/syslib/FileIO.mod \
+     src/SymTab.def src/SymTab.mod src/QbeGen.def src/QbeGen.mod \
+     /tmp/gap.mod                      # /tmp/gap.mod: MODULE Gap; IMPORT SymTab; VAR ExitCode:INTEGER; BEGIN ExitCode:=0 END Gap.
+```