فهرست منبع

docs: session handoff 2026-10-03 (two-phase slices 1-5)

Branch ast-stage-c: AST linked + inert builders for expressions,
designators, calls/builtins and core statements.  Suite 178/178, fixpoint
OK (3000988 bytes).  Records the deferred work and the local-array
miscompile finding; next is declarations / remaining statements / Lower.
Eric Streit 1 هفته پیش
والد
کامیت
19e1c69f78
1فایلهای تغییر یافته به همراه61 افزوده شده و 0 حذف شده
  1. 61 0
      docs/session-handoff-2026-10-03.md

+ 61 - 0
docs/session-handoff-2026-10-03.md

@@ -0,0 +1,61 @@
+# Session handoff — 2026-10-03 (two-phase frontend, slices 1–5)
+
+State: branch **`ast-stage-c`** (off `1c93f19`, not merged to `master`).
+Suite **178/178**; self-hosting fixpoint **OK** (**3,000,988 bytes**).
+Working tree clean except the user's `compiler/toto.mod`.
+
+Plan of record: `docs/plan-two-phase.md`.  Start: §4 slice 3
+(statements) or §4 slice 4 (declarations).
+
+## What landed (all inert — emitted `.ssa` unchanged, fixpoint byte-identical)
+
+| Tag | Docs | What |
+| --- | --- | --- |
+| `v3-ast-slice1` | `summary_two-phase-slice1.md` | `AST` linked into the build; `twoPhase` flag; `AST.Init` per unit |
+| `v3-ast-slice2` | `summary_two-phase-slice2.md` | expression spine + literals + parens + unary minus (`astCur`, per-invocation `astIsLit`) |
+| `v3-ast-slice3` | `summary_two-phase-slice3.md` | `Design`: identifiers, `[i]`, `.f`, `^`, qualified names |
+| `v3-ast-slice4` | `summary_two-phase-slice4.md` | calls/`NkCall` with actuals, `NOT`, builtins as named `NkCall`s |
+| `v3-ast-slice5` | `summary_two-phase-slice5.md` | statements: `NkBlock`, assign, `IF`/`WHILE`/`REPEAT`/`LOOP`/`EXIT`/`FOR`/`RETURN`/`HALT`, calls |
+
+The AST is **built alongside** the existing lowering; nothing consumes it
+yet.  Each slice was gated by `build.sh` + `run_tests.sh` + `fixpoint.sh`,
+and the tree shape was checked with a **temporary `AST.Dump`** in the root
+production (removed before each commit).
+
+## Not converted yet (still `NoNode`)
+
+- Statements: `CASE`, `WITH`, `INCL`/`EXCL`/`INC`/`DEC`/`NEW`/`DISPOSE`.
+- Expressions: brace/set literals, `ResultComp` call suffixes.
+- Declarations (`CONST`/`TYPE`/`VAR`/`PROC` → AST).
+- **`Lower` + `.ssa` byte-compare** (the point where the old emit path
+  gets deleted) — not started.
+
+## Known bug found this session
+
+**Local arrays in a `PROCEDURE` are miscompiled** (module-level arrays
+are fine).  Repro + detail: `docs/wip/local-array-bug.mod`; observed 1,
+want 60.  Pre-existing, unrelated to the refactor, but it bit the
+self-hosted fixpoint when `IfStat` used a local `ARRAY`.  Worth a
+dedicated fix (same family as the Stage-A array-of-record stride bug).
+
+## Design notes for the next slice
+
+- Expression result slot: module-level `astCur`, saved into locals by the
+  combination productions; `Fact` uses a per-invocation `astIsLit`
+  (nested facts cannot corrupt an outer one).
+- Statement result slot: module-level `astStmt`; `StatSeq` folds into
+  `NkBlock`; calls use the `AstCallNode` helper over `astArgs`/`astNArgs`.
+- `AST` nodes: `NkDesignator(base, selectors…)`, `NkSelector(op)` with
+  `SelField`/`SelIndex`/`SelDeref`, `NkCall(callee, actuals…)`, plus the
+  kinds/ops in `compiler/src/AST.def` (`OpNot` was added).
+- **Do not use local arrays** in grammar actions until the bug above is
+  fixed; use scalars or module-level scratch.
+
+## Resume / verify
+
+```sh
+cd ~/Projets/Projets-Modula2/MyWork/m2compiler-V3
+git checkout ast-stage-c
+cd compiler && ./build.sh && ./run_tests.sh   # 178/178
+cd .. && ./bootstrap/fixpoint.sh              # FIXPOINT OK
+```