# Session summary — 2026-10-01 (b): showcase21 — suffixes, coroutines, library Suite **174/174**; self-hosting fixpoint **OK** (image **2,785,569 bytes**). `master`, tree clean except the user's uncommitted `compiler/toto.mod`. This step tours the three features landed this session on items 2, 4 and 6 of the gaps list (1 `GOTO`, 3 generics, 5 multiple inheritance were deliberately skipped). ## Steps, tags and headline commits | Step | Tag | Commit | What | | --- | --- | --- | --- | | Language + library | `v3-resultsfx-coroutines-lib` | `31adfc3` | suffixes, coroutines, core library | | Notes | — | `e844223` | session summary | | `LongIO` | — | `b1a52db` | channel-based LONGREAL I/O | | Showcase | `v3-showcase21` | (this commit) | showcase21 end to end | ## 1. Result suffixes `F()^`, `F()[i]`, `F().field` — components applied to a function-call result (`ResultComp` in `M2.atg`, inside the call group so the Coco/R grammar stays LL(1)-clean). A final scalar is loaded with `ElemLoad`; aggregates stay as their descriptor address. Expression context only. ## 2. PIM coroutines `PROCESS` plus `NEWPROCESS`/`TRANSFER`/`IOTRANSFER` are predefined in `SYSTEM` (with a new parameterless `PROC` type) and bind to `ucontext`-backed helpers in `runtime/syslib/shim.c`. Coroutine bodies are called with a 0 static link (module-level procedures). ## 3. Standard library gm2/ISO names added under `stdlib/`: `ConvTypes`, `IOConsts`, `SIOResult`, `TERMINATION`, `StrIO`, `InOut`, `StdIO`, `WholeStr`, `RealStr`, `LongStr`, `LongMath`, `LongIO`, `STextIO`, `SWholeIO`, `SRealIO`, `DynamicStrings` (core) and `SysStorage`. Backend fixes alongside: procedure values / `LONGINT` are 8-byte in array load/store and the parameter prologue; driver session file cap 32 → 128; `Math.ln`/`arctan` wrap `log`/`atan`. ## 4. Showcase `compiler/tests/showcase21.mod` (`Showcase21`, exit 42) exercises: - **result suffixes** — `GetRec()^.a + GetRec()^.b = 42`, `GetArr()^[i]` sums to 4, then `40 + 2 + 2 - 2 = 42`; - **coroutines** — `Ping`/`Pong` ping-pong via `TRANSFER`, hand control back to the main process after five hits; - **library** — `RealStr.RealToFixed(42.0, 0, num)` gives `"42"`, `LongMath.sqrt(1764.0)` round-trips to 42, and `WholeStr.CardToStr` + `DynamicStrings` build the label. ``` showcase21 total=42 ``` ## Tests (174, was 171) New this session: `t_resultsfx`, `t_coroutine`, `t_dynstr`, `library1` (16-module session) and `Showcase21`. Full suite green. ## Resume ```sh cd .../m2compiler-V3 ./bootstrap/fixpoint.sh # FIXPOINT OK cd compiler && ./build.sh && ./run_tests.sh # 174/174 ``` ## Remaining `GOTO`/labels, generics, multiple inheritance (deliberate), full forward variables, statement-context result suffixes, and the channel/device library holes (`LongWholeIO`, `wrapclock`/`wraptime`/ `wrapc`, `TimeString`, `ChanConsts`/`GenDevIF`/`DeviceTablePtr`/ `StdChans`/`StreamFile`/`FIO`).