|
|
@@ -0,0 +1,91 @@
|
|
|
+# Session handoff — 2026-10-08
|
|
|
+
|
|
|
+Branch **`generics-inc1`** (off `ast-stage-c`). Working tree clean.
|
|
|
+
|
|
|
+Current state: **suite 189/189**, **FIXPOINT OK (3,490,054 bytes)**.
|
|
|
+
|
|
|
+## Where the branches/tags stand
|
|
|
+
|
|
|
+- `ast-stage-c` — the L7 refactor + language work (tags below), HEAD
|
|
|
+ `0f611c0 docs: GOTO/labels landed`.
|
|
|
+- `generics-inc1` — `ast-stage-c` + Increment 1 of generics, HEAD
|
|
|
+ `55d2e7c docs: generics inc1 status + inc2 plan`.
|
|
|
+
|
|
|
+Tags on `ast-stage-c` (chronological):
|
|
|
+`v3-lower7-flip`, `v3-lower7-decoupled`, `v3-lower7-complete`,
|
|
|
+`v3-fix-arrrecfield`, `v3-arrrecfield-complete`, `v3-status-2026-10-08`,
|
|
|
+`v3-composite-results`, `v3-chain-calls`, `v3-goto`.
|
|
|
+
|
|
|
+## What this session did
|
|
|
+
|
|
|
+**L7 refactor — done.** Lower is the only emitter; the inline emit was
|
|
|
+deleted from statements, control flow, declarations,
|
|
|
+expressions/designators, calls and `ProcHeading`. Found and fixed a
|
|
|
+latent **VAR-actual note-ring bug** (`RestoreSession` now clears the
|
|
|
+ring). Swept dead code (0 unreferenced procs). Retired `-lower` and
|
|
|
+the degenerate byte-compare tests (suite 204 → 181).
|
|
|
+
|
|
|
+**Language / correctness work (all on `ast-stage-c`):**
|
|
|
+- **array-of-record inline length words** — small arrays expand inline,
|
|
|
+ large ones get a generated **run-time init loop** (`t_arrrecfld`,
|
|
|
+ `t_arrrecbig`).
|
|
|
+- **statement-context result suffixes** (`F()^.x := e`, `t_stmtsfx`).
|
|
|
+- **composite function results** (record/array/set, sret) — which also
|
|
|
+ fixed **methods with local variables** (their block decls were never
|
|
|
+ stored); `t_retrec`, `t_retmeth`.
|
|
|
+- **class results + chained post-call method calls** (`F().M()`,
|
|
|
+ `t_chain`).
|
|
|
+- **`GOTO`/labels** — required splitting `Design` into
|
|
|
+ `Design` + `DesignTail` to resolve the LL(1) label/designator clash;
|
|
|
+ `t_goto`, `t_gotobad`.
|
|
|
+
|
|
|
+**Docs refreshed:** `STATUS.md`, `analysis_gaps.md`, `features.md`,
|
|
|
+`analysis_generics.md`.
|
|
|
+
|
|
|
+## Generics (the active thread)
|
|
|
+
|
|
|
+Syntax chosen: **ISO 10514-2** generic modules + refinement
|
|
|
+(`../Generics/m2generic-syntaxe-analysis.md`).
|
|
|
+
|
|
|
+**Increment 1 — done (`e1d0472`).** Grammar recognition of the four
|
|
|
+module categories:
|
|
|
+`GENERIC DEFINITION/IMPLEMENTATION MODULE M (E : TYPE); …` and
|
|
|
+`DEFINITION/IMPLEMENTATION MODULE X = M(actuals); …`. Formals are
|
|
|
+unresolved alias types (`SymTab.EnterTypeParam`); refinements are
|
|
|
+recorded. A refinement still yields an **empty** module.
|
|
|
+
|
|
|
+**Increment 2 — the next step.** Instantiate by **re-parsing the
|
|
|
+generic source with a substitution scope**, driven by a driver session
|
|
|
+pre-pass:
|
|
|
+1. record each generic's def/impl **file path** when parsed;
|
|
|
+2. on a refinement, re-open the generic, bind formals to actuals, name
|
|
|
+ the module `X`, dedup, and lower it **before** the importer;
|
|
|
+3. move the normal body's `BeginDef` into the `;` branch so the
|
|
|
+ refinement does not pre-register `X`; add
|
|
|
+ `SymTab.EnterTypeParamBound`; add a grammar instantiation context
|
|
|
+ (`instActive`/`instName`/`instActual`) + accessors
|
|
|
+ (`IsGenericUnit`, `IsRefinementUnit`, `GetRefinement`,
|
|
|
+ `SetInstantiation`); add the driver re-parse logic.
|
|
|
+
|
|
|
+Details and the full plan are in `docs/analysis_generics.md` (top note).
|
|
|
+
|
|
|
+## Also still open (from `docs/STATUS.md` / `analysis_gaps.md`)
|
|
|
+
|
|
|
+- L7 item 7 (delete `SaveSession`/`RestoreSession`/`SetNoEmit`) —
|
|
|
+ blocked on the grammar's last suppressed writers; low payoff.
|
|
|
+- **Library holes** (device/IO framework, `docs/wip/chanconsts.*`,
|
|
|
+ `streamfile.*`).
|
|
|
+- **Robustness**: `M2` exits 0 on errors / aborts on a missing input
|
|
|
+ file; weak error recovery; fixed table limits.
|
|
|
+- The latent **size-sensitive V3 miscompile** (removing `ASTDUMP` from
|
|
|
+ `M2.atg` breaks the fixpoint).
|
|
|
+- Generics increments 3–4 (multiple/const params, proc params,
|
|
|
+ constraints, `GENERIC CLASS`).
|
|
|
+
|
|
|
+## How to resume
|
|
|
+
|
|
|
+```sh
|
|
|
+cd compiler && ./build.sh && ./run_tests.sh # 189/189
|
|
|
+cd .. && bootstrap/fixpoint.sh # FIXPOINT OK
|
|
|
+git log --oneline -5
|
|
|
+```
|