Procházet zdrojové kódy

docs: session save 2026-09-24 — fileio fix, m2make, nested arrays, procedure types, M2S clean (110/110)

Eric Streit před 2 týdny
rodič
revize
e596a617d6
1 změnil soubory, kde provedl 76 přidání a 0 odebrání
  1. 76 0
      docs/session-2026-09-24.md

+ 76 - 0
docs/session-2026-09-24.md

@@ -0,0 +1,76 @@
+# Session save — 2026-09-24 (m2compiler-V3)
+
+HEAD `dd7767c`. Suite **110/110**, build warning-free, tree clean, no
+remote (`git.txt` untracked).
+
+## Landed today
+
+| Tag | Commit | What |
+|---|---|---|
+| `v3-fix-fileio-null` | `035d9ef` | shim file routines are NULL-handle safe (failed open no longer SIGSEGVs; `t_badfile`) |
+| `m2make-1.0` (+`-summary`) | `2f243ed`/`863a5ec` | `tools/m2make`: build-order front-end for M2/gm2 (topo-sort imports, incremental); `FileIO` argv starts at 1; tests 18/18 |
+| `v3-fix-nested-arrays` | `f019a17` | `Fact` no longer double-loads nested-array designators (row → open-array actual no longer SIGSEGVs); `t_nestidx` |
+| `v3-proctypes` | `439d955` | **procedure types + indirect calls** (see below); `t_proctype` |
+| `v3-m2s-clean` | `dd7767c` | **`M2S` compiles clean under V3** + compatibility additions; `t_compat` |
+
+Later tags may not all appear in `git tag | tail` (alphabetical); use
+`git tag | grep -E 'm2make|proctypes|m2s|nested|fileio'`.
+
+## Key results
+
+- **Self-compilation:** `SymTab`, `QbeGen` and **`M2S`** compile clean
+  under V3 (0 errors).
+- **Procedure types** (step 3): `PROCEDURE (…) : T` types (named *and*
+  type-only param lists), procedure-typed variables, assignment of a
+  procedure name, indirect calls (`call %ptr(l 0, …)`). Static link is
+  always `0` (nested procedure values / static links are not yet
+  supported). Implementation: `SymTab` `FProc` descriptor +
+  `ProcTypeOf` + structural compatibility; `QbeGen` `ProcAddr`,
+  `CallBeginInd`/`CallEnd`; grammar `ProcType`,
+  proc-value in `Fact`, proc-type path in `ArgList`/`ActParam`.
+- **Compatibility additions** V3 now accepts to compile CR's
+  *generated* scanner tables: `&` (AND), `~` (NOT), `LENGTH`
+  (alias of `LEN`), `ORDL` (alias of `ORD`), octal char literals
+  (`0C` …), empty `THEN`/`ELSE`/loop bodies, and `CAP` (new builtin).
+  These come from the CR binary's built-in templates, not our
+  `scanner.frm`.
+- **Latent bug fixed:** `ABS` (and `CAP`) computed a result temp that
+  `Fact` never copied back to `q`; both now `CopyOp(qa, q)`.
+
+## Remaining self-hosting gaps
+
+- **`M2P.mod`** (Coco/R parser): 107 errors, 102 of them
+  `undeclared identifier` = **within-module forward procedure calls**
+  in CR's recursive-descent parser (gm2 hoists; ISO wants
+  declaration-before-use or `FORWARD`). Also `BITSET{…}` constructors
+  and `symSet[0, 0]` nested-array assignment.
+- **`M2.mod`** (driver): needs nested procedure values with static
+  links (`Error := StoreError`, `StoreError` nested in `ListHandler`).
+- Host `FileIO` caps at 16 open files — compiling all ~16 modules in
+  one session exceeds it; split sessions or raise the cap.
+- Then: cross-stage `FileIO` selection and `bootstrap/fixpoint.sh`
+  (Stage1 gm2 → Stage2 V3 → Stage3 V3, byte-identical `.ssa`),
+  plausibly driven by `M2make`.
+
+## Resume
+
+```sh
+cd /home/eric/Projets/Projets-Modula2/MyWork/m2compiler-V3/compiler
+./build.sh && ./run_tests.sh            # expect 110/110
+
+# M2S clean check (needs the stub program):
+printf 'MODULE Gap;\nIMPORT SymTab;\nVAR ExitCode : INTEGER;\nBEGIN ExitCode := 0 END Gap.\n' > /tmp/gap.mod
+./M2 ../stdlib/storage.def ../stdlib/storage.mod \
+     ../runtime/syslib/SysShim.def ../runtime/syslib/SysShim.mod \
+     ../runtime/syslib/FileIO.def ../runtime/syslib/FileIO.mod \
+     src/M2S.def src/M2S.mod /tmp/gap.mod
+
+# M2make:
+cd ../tools/m2make && ./build_gm2.sh && ./build_m2.sh && ./tests/run_tests.sh
+```
+
+## Docs added today
+
+`docs/summary_fix-fileio-null.md`, `docs/summary_m2make.md`,
+`docs/summary_fix-nested-arrays.md`, `docs/summary_proctypes.md`,
+`docs/summary_m2s-clean.md`.