|
|
@@ -0,0 +1,67 @@
|
|
|
+# Session save — 2026-09-24 (part b): forward procedure calls
|
|
|
+
|
|
|
+Continues `docs/session-2026-09-24.md`. HEAD after this: `v3-forward-calls`
|
|
|
+(+ the showcase). Suite **111/111**.
|
|
|
+
|
|
|
+## Landed
|
|
|
+
|
|
|
+- **`v3-forward-calls`** (`6cd5ef9`) — within-module forward procedure
|
|
|
+ calls solved for self-hosting; `M2S` and `M2P` now compile clean
|
|
|
+ under V3. Details in `docs/summary_forward-calls.md`. In short:
|
|
|
+ - CR's parser output hides its forward declarations in a comment by
|
|
|
+ default (`-m` suppresses `FORWARD`); V3 is single-pass. Generate
|
|
|
+ without `-m` for V3 (real `FORWARD`s), keep `-m` for the gm2
|
|
|
+ stage-1 build (gm2's link-time pass rejects `FORWARD`).
|
|
|
+ - Added: empty `ELSIF … THEN` bodies, `BITSET` predef
|
|
|
+ (`SET OF [0..15]`), typed set constructor `BITSET{…}`, and a
|
|
|
+ driver file-handle leak fix (`compiler.frm` now closes each source;
|
|
|
+ the host FileIO caps at 16 open files).
|
|
|
+
|
|
|
+## Self-compilation status (sources generated without `-m`)
|
|
|
+
|
|
|
+| Source | Errors under V3 |
|
|
|
+|---|---|
|
|
|
+| `SymTab` | 0 |
|
|
|
+| `QbeGen` | 0 |
|
|
|
+| `M2S` (scanner) | 0 |
|
|
|
+| `M2P` (parser) | 0 |
|
|
|
+| `M2.mod` (driver) | 12 |
|
|
|
+
|
|
|
+## Remaining for the driver `M2.mod`
|
|
|
+
|
|
|
+- **Nested modules** — `ListHandler` is a Wirth-style local
|
|
|
+ `MODULE … EXPORT StoreError, PrintListing, PrintConsoleErrors,
|
|
|
+ ResetErrors`; V3 parses it but marks 230 and does not expose its
|
|
|
+ exports. Needs nested-module lowering (prefixed globals/functions +
|
|
|
+ the enclosing scope seeing the `EXPORT` list).
|
|
|
+- **String building** — the driver builds file names with
|
|
|
+ `Strings.Delete`/`Append`. V3's descriptor header is *both* the
|
|
|
+ open-array count and the logical string length (`m2setlen`), so once
|
|
|
+ `Assign` shrinks it, `Append` past the logical length traps. `Delete`
|
|
|
+ alone is safe. Needs either a string-model decision (keep a separate
|
|
|
+ length) or a `compiler.frm` rewrite that avoids incremental append.
|
|
|
+
|
|
|
+Then: cross-stage `FileIO` selection and `bootstrap/fixpoint.sh`,
|
|
|
+plausibly driven by `M2make`; note the stage-aware CR flags
|
|
|
+(`-m` for gm2, no `-m` for V3).
|
|
|
+
|
|
|
+## Showcase
|
|
|
+
|
|
|
+`compiler/tests/showcase13.mod` (exit 42, suite 111/111): `FORWARD`
|
|
|
+mutual recursion (`Even`/`Odd`) plus `BITSET` union/membership and the
|
|
|
+typed set constructor `BITSET{…}`.
|
|
|
+
|
|
|
+## Resume
|
|
|
+
|
|
|
+```sh
|
|
|
+cd /home/eric/Projets/Projets-Modula2/MyWork/m2compiler-V3/compiler
|
|
|
+./build.sh && ./run_tests.sh # gm2 build (-m), expect 111/111
|
|
|
+
|
|
|
+# V3-facing (FORWARD) re-generation + M2P check:
|
|
|
+(cd src && CRFRAMES="$(pwd)" /home/eric/Projets/Projets-Modula2/MyWork/CocoGm2/CR -C M2.atg >/dev/null)
|
|
|
+./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 \
|
|
|
+ src/M2S.def src/M2S.mod src/M2P.def src/M2P.mod /tmp/gap.mod
|
|
|
+```
|