Prechádzať zdrojové kódy

docs: session save 2026-09-22 — step 7 (syslib port + self-hosted syslib)

Eric Streit 2 týždňov pred
rodič
commit
cb4642f5a2
1 zmenil súbory, kde vykonal 73 pridanie a 0 odobranie
  1. 73 0
      docs/session-2026-09-22-step7.md

+ 73 - 0
docs/session-2026-09-22-step7.md

@@ -0,0 +1,73 @@
+# Session save — 2026-09-22 (m2compiler-V3, step 7: syslib port)
+
+## Where we are
+
+HEAD: `a9e1f77`. Milestone tags `v3-step7` and `v3-step7.1`.
+Suite **103/103** (all run via `qbe → cc → run`; 7 sessions,
+4 session-output, 2 session-input, 4 trap-aborts, + rejects).
+Build is warning-free (only the known-benign Coco TypeBlock LL(1)
+advisory). Tree clean; `git.txt` untracked (ignored). No remote.
+
+## Tag lineage (this session, all green at each tag)
+
+- `v3-step5.1`…`5.7` — FFI (`EXTERNAL`) + C shim; `SysIO`; HIGH/LEN;
+  `Strings`/`TextIO`; `Math` (libm) + `WholeIO` + input; `Files`;
+  module-qualified symbols + real qualified access; `ADDRESS`/`ADR`/
+  `SIZE` + `Storage`.
+- `v3-step6.1` (99) — `CHR`/`ORD`/`VAL`/`ABS`/`INC`/`DEC`.
+- `v3-step6.2` (100) — true 64-bit `LONGINT`/`LONGCARD`.
+- `v3-step7` (102) — value open-array formals; syslib gate;
+  bootstrap ABI analysis.
+- `v3-step7.1` (103) — self-hosted `runtime/syslib/SysShim` +
+  `FileIO` (V3-only).
+
+`stdlib/`: sysio, textio, strings, wholeio, math, files, storage.
+`runtime/syslib/`: shim.c, SysShim, FileIO.
+
+## Language / toolchain status (short)
+
+Full scalar + composite types, pointers/NEW/DISPOSE, records+WITH,
+sets+IN, arrays (length-prefixed), procedures (value/VAR/array
+params, recursion, nested + static-link display), separate
+compilation (def/impl, FROM/IMPORT, qualified, opaque completion),
+`DEFINITION`/`IMPLEMENTATION`, `HIGH`/`LEN`/`SIZE`/`TSIZE`/`ADR`/
+`NEW`/`DISPOSE`/`CHR`/`ORD`/`VAL`/`ABS`/`INC`/`DEC`, 64-bit longs,
+`ADDRESS` + `Storage`, FFI. 103 tests.
+
+## Step 7 outcome (the important part)
+
+Goal was "port `FileIO` off gm2-only libs". Attempting it exposed a
+**fundamental bootstrap ABI conflict**: gm2's `ARRAY OF CHAR` is a
+NUL-terminated `char*` and its FFI is `DEFINITION MODULE FOR "C"`
++ `EXPORT UNQUALIFIED`; V3's is a length-prefixed descriptor with
+`PROCEDURE …; EXTERNAL;`. One `FileIO` can't serve both.
+
+Resolution taken: **bootstrap split** (as Blaise does with FPC) —
+stage 1 keeps the host `FileIO`; stage 2 links the self-hosted
+`runtime/syslib/FileIO` (over `SysShim`/`shim.c`). Delivered and
+tested (`FioProg` → 42).
+
+## Remaining for step 8 (self-hosting fixpoint)
+
+1. **Redux sweep of the compiler's own sources** so V3 can compile
+   them: `0C`/`15C`/`177C`/`32C` char-code literals → `CHR(n)`;
+   `&`/`~`/`<>` → `AND`/`NOT`/`#`. (Compiler sources are otherwise
+   syslib-clean; only `FileIO` uses gm2-only libs, and it stays the
+   stage-1 host lib.)
+2. **FileIO selection between stages** in the build (stage 1 host,
+   stage 2 `runtime/syslib`).
+3. Then `bootstrap/fixpoint.sh`: Stage1 (gm2) → Stage2 (V3) →
+   Stage3 (V3), `diff -r` all `.ssa` byte-identical, suite green on
+   all three stages (rolling-bootstrap design per the Blaise map).
+
+Deferred everywhere: class lowering (vtable/`THIS`), procedure-type
+variables, cross-class `VAL`/`CAST`, `FLOAT`/`TRUNC`, `CAP`,
+long↔REAL conversions, strings escapes, `WITH`-field `VAR` actuals.
+
+## Resume commands
+
+```sh
+cd /home/eric/Projets/Projets-Modula2/MyWork/m2compiler-V3/compiler
+./build.sh && ./run_tests.sh   # expect 103/103, zero gm2 warnings
+```
+Recommended next: the compiler-source Redux sweep (step 8 prep).