|
|
@@ -95,7 +95,7 @@ Current rung (measured today, normalised position):
|
|
|
|
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|
-| **8098** | `Attributes = (Constant,Formula,…)` — an **enumeration** type (`ERR 41`) |
|
|
|
+| **8362** | `CellRec = record` — a **record** type (`ParseType` `TkRecord`, `ERR 102`) |
|
|
|
|
|
|
Rungs behind it (now passed):
|
|
|
|
|
|
@@ -104,13 +104,14 @@ Rungs behind it (now passed):
|
|
|
| 7791 | `FXMax : Char = 'G'` — scalar typed constant | Stage 4 (scalar) |
|
|
|
| 7791 | `EofLine = ^M` — caret character constant | Stage 3 |
|
|
|
| 7972 | `Numbers : set of Char = ['0'..'9']` — set typed constant | sets, increment 1 |
|
|
|
+| 8098 | `Attributes = (Constant,…)` — enumeration; and `SetOfAttri = Set of Attributes` | Stage 5 (enums) |
|
|
|
|
|
|
Rungs ahead:
|
|
|
|
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|
-| 8060+ | `SetOfAttri = Set of Attributes` — a set over an enum (`ERR` — needs enums) |
|
|
|
-| 8237 | `CellRec = record` (`ERR 102`, `ENoLib`) |
|
|
|
+| past 8362 | the record body, then `Cells = array['A'..'G',1..FYMax] of CellRec` (2-D, Stage 8) |
|
|
|
+| then | the `var` block, `{$I}` at 9404, and everything in `CALC.INC` |
|
|
|
|
|
|
Corrections the measurements force, worth stating plainly because the stage list
|
|
|
below was written before them:
|
|
|
@@ -140,10 +141,10 @@ stripped.
|
|
|
| typed constants — **set** | `CALC.PAS:114` | **done (sets, increment 1)** — code-resident bytes; `t61_setconst` |
|
|
|
| typed constants — **array** | `CALC.PAS:137`; `CALC.INC:777` | `ERR 102` — needs initialised storage |
|
|
|
| lexical `^M`, `#nn` | `CALC.PAS:113` | **done (Stage 3)** — `t60_charcaret` |
|
|
|
-| enum type `(Constant,Formula,…)` | `CALC.PAS:120` | `ERR 41` — the current rung |
|
|
|
+| enum type `(Constant,Formula,…)` | `CALC.PAS:120` | **done (Stage 5)** — ordinals; bounds carried; `t62_enum` |
|
|
|
| subrange types `'A'..'G'`, `0..20`, `string[70]` | `CALC.PAS:117,119,130` | OK |
|
|
|
| `set of Char` / `set of <subrange>` | `CALC.PAS:114` | **type + sizing done** (hybrid bytes) |
|
|
|
-| `set of <enum>` | `CALC.PAS:121,127` | needs the enum base |
|
|
|
+| `set of <enum>` | `CALC.PAS:121,127` | **sizing done** (enum bounds → 1 byte for Attributes) |
|
|
|
| set constructor `[a..b, c]`, `in` (compile-time) | `t61_setconst` | **done** — folding only |
|
|
|
| set `in` (run-time), `+`, `*`, `=`/`<>`, assignment, set *variables* | 47 × `in`, 6 × `+ [`, 2 × `*` | `ENoLib` — next sets increment |
|
|
|
| `record` + field select `Sheet[FX,FY].CellStatus` | `CALC.PAS:126` | `ERR 102` |
|
|
|
@@ -412,10 +413,13 @@ The ladder row now sits on **sets**.
|
|
|
literals already are), addressable through `DS` because a `.COM` has one
|
|
|
segment — no `seg cs`, which is the single divergence from the original.
|
|
|
Still `ENoLib`: run-time `in`, set *variables*, `+`/`*`/`=`/`<>`, assignment.
|
|
|
-- **The ladder now stops at `ERR 41` at `8098`** — `Attributes =
|
|
|
- (Constant,…)`, an **enumeration** type. So enums are the next rung and the
|
|
|
- `SetOfAttri = Set of Attributes`/`CellStatus : set of Attributes` lines come
|
|
|
- right behind them.
|
|
|
+- **Enumerations are landed (Stage 5)** — ordinals 0..n-1, one-byte type,
|
|
|
+ bounds carried so `set of Attributes` sizes to one byte. Fixture `t62_enum`.
|
|
|
+ `RdConst` now resolves a named constant, which set literals and `case`
|
|
|
+ labels need.
|
|
|
+- **The ladder now stops at `ERR 102` at `8362`** — `CellRec = record`. So
|
|
|
+ records are the next rung, then the 2-D array `Cells = array['A'..'G',
|
|
|
+ 1..FYMax] of CellRec`, then the `var` block and the `{$I}` at 9404.
|
|
|
- **One surprise on resuming:** the working tree was found holding the
|
|
|
nonvacuity script's *frame-rule* mutation of `shell/Compiler.mod` (the
|
|
|
`locFree := 0FFFEH` / pre-decrement-base revert), i.e. a mutation from a
|
|
|
@@ -425,8 +429,8 @@ The ladder row now sits on **sets**.
|
|
|
byte-for-byte the same for INTEGER locals, so the compile matrix would have
|
|
|
been green and only `t40_readln` (and later CALC) would have noticed.
|
|
|
- **Verified baseline, run on this commit:** `./tests/run_all.sh` →
|
|
|
- **OVERALL: ALL PASS**, compile matrix **62/62**, CALC ladder **1/1** at
|
|
|
- `ERR 41 8098`, 52 `.COM` linked and 52 executed under both qemu and Exec86.
|
|
|
+ **OVERALL: ALL PASS**, compile matrix **63/63**, CALC ladder **1/1** at
|
|
|
+ `ERR 102 8362`, 53 `.COM` linked and 53 executed under both qemu and Exec86.
|
|
|
- **`tests/nonvacuity.sh`:** re-run after this commit's cases (the set
|
|
|
membership bit among them); see the commit message for the count. It is not in
|
|
|
the default `run_all.sh` and must be run **manually** after touching any check.
|
|
|
@@ -565,10 +569,18 @@ What is **not** done, deliberately, is a typed constant of a structured type:
|
|
|
|
|
|
### Then, in ladder order
|
|
|
|
|
|
-**Stage 5 — enumerations.** `Attributes = (Constant,Formula,Txt,OverWritten,
|
|
|
-Locked,Calculated)`. 1 byte if fewer than 256 values, else 2 (`RESUME-TP3.md`
|
|
|
-§2). Ordinal values 0..n; this feeds `Succ`/`Pred` and `set of T`.
|
|
|
-Ladder: 8036 → 8060.
|
|
|
+**Stage 5 — enumerations. DONE.**
|
|
|
+
|
|
|
+`Attributes = (Constant,Formula,Txt,OverWritten,Locked,Calculated)`. Each
|
|
|
+enumerator becomes a constant holding its ordinal position (0..n-1); the TYPE is
|
|
|
+one byte (TP3 uses one below 256 values, `RESUME-TP3.md` §2) and carries its
|
|
|
+bounds `0..n-1` in the symbol, which is what `set of Attributes` sizes its base
|
|
|
+from — one byte, against 32 for `set of Char`. `ParseType` grew the `(`
|
|
|
+arm, `SymEntry` grew `lo`/`hi`, and `RdConst` now resolves a NAMED constant, so
|
|
|
+`[Constant, Formula]` and (soon) `case` labels over enumerators work.
|
|
|
+`Succ`/`Pred` over enums are a later milestone (they are the standard-function
|
|
|
+milestone's job, not the type's). Fixture `t62_enum`.
|
|
|
+Ladder: 8098 → 8362 (the enum AND `SetOfAttri = Set of Attributes`).
|
|
|
|
|
|
**Stage 6 — sets. Increment 1 DONE; the rest is the next milestone.**
|
|
|
|