|
@@ -97,7 +97,7 @@ Current rung (measured today, normalised position):
|
|
|
|
|
|
|
|
| position | blocker |
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|---|---|
|
|
|
-| **15131** | `CellStatus := [Txt]` in `Init` — a SET assignment to a record field (`ERR 102`) |
|
|
|
|
|
|
|
+| **15201** | `Contents := ''` in `Init` — a STRING assignment to a record field through DI (`ERR 102`) |
|
|
|
|
|
|
|
|
Rungs behind it (now passed):
|
|
Rungs behind it (now passed):
|
|
|
|
|
|
|
@@ -120,12 +120,13 @@ Rungs behind it (now passed):
|
|
|
| 14195 | variable array subscripts | scaled addressing, 1 byte or 2 (`t75_arrvar`) |
|
|
| 14195 | variable array subscripts | scaled addressing, 1 byte or 2 (`t75_arrvar`) |
|
|
|
| 14330 | write field widths | `wrintw`, runtime 770 -> 878 (`t76_width`) |
|
|
| 14330 | write field widths | `wrintw`, runtime 770 -> 878 (`t76_width`) |
|
|
|
| 15026 | WITH + n-D subscripts | row strides, fields via DI (`t77_with`) |
|
|
| 15026 | WITH + n-D subscripts | row strides, fields via DI (`t77_with`) |
|
|
|
|
|
+| 15131 | set field assignment | typed by the target; run-time `in` (`t78_setfield`) |
|
|
|
|
|
|
|
|
Rungs ahead:
|
|
Rungs ahead:
|
|
|
|
|
|
|
|
| position | blocker |
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|---|---|
|
|
|
-| 15131 | set/string assignment to a record field; then the rest of `CALC.INC` |
|
|
|
|
|
|
|
+| 15201 | string assignment to a record field through DI; then the rest of `CALC.INC` |
|
|
|
|
|
|
|
|
Corrections the measurements force, worth stating plainly because the stage list
|
|
Corrections the measurements force, worth stating plainly because the stage list
|
|
|
below was written before them:
|
|
below was written before them:
|
|
@@ -399,14 +400,14 @@ ladder order (each stage removes the blocker the previous one exposed).
|
|
|
|
|
|
|
|
### Session state — where to resume
|
|
### Session state — where to resume
|
|
|
|
|
|
|
|
-Last touched 2026-10-21. **Twenty-two rungs are landed across three sessions**
|
|
|
|
|
|
|
+Last touched 2026-10-21. **Twenty-three rungs are landed across three sessions**
|
|
|
(Stages 1-4, sets, enums, record types, array declarations, element/field
|
|
(Stages 1-4, sets, enums, record types, array declarations, element/field
|
|
|
access, file types, the calling convention and string value parameters,
|
|
access, file types, the calling convention and string value parameters,
|
|
|
`Length`, the CRT identifiers, `Kbd`, `KeyPressed`, `var` parameters, the CASE
|
|
`Length`, the CRT identifiers, `Kbd`, `KeyPressed`, `var` parameters, the CASE
|
|
|
-labels, variable array subscripts, write field widths, and WITH with
|
|
|
|
|
-n-dimensional subscripts). The ladder row has moved from the first typed
|
|
|
|
|
-constant at 7791 to **15131, inside `CALC.INC`'s `Init` — `CellStatus :=
|
|
|
|
|
-[Txt]`, a set assignment to a record field**.
|
|
|
|
|
|
|
+labels, variable array subscripts, write field widths, WITH with
|
|
|
|
|
+n-dimensional subscripts, and set-field assignment). The ladder row has moved
|
|
|
|
|
+from the first typed constant at 7791 to **15201, inside `CALC.INC`'s `Init` —
|
|
|
|
|
+`Contents := ''`, a string assignment to a record field through DI**.
|
|
|
|
|
|
|
|
The rung commits and their tags, in order (each is one rung with its own
|
|
The rung commits and their tags, in order (each is one rung with its own
|
|
|
fixture, red proof, and — where the harness allows — execution under qemu and
|
|
fixture, red proof, and — where the harness allows — execution under qemu and
|
|
@@ -435,10 +436,11 @@ Exec86):
|
|
|
| `8a265e7` | `v-TP3-CALC-CASELIST` | `ERR 102 14195` (variable array subscript) |
|
|
| `8a265e7` | `v-TP3-CALC-CASELIST` | `ERR 102 14195` (variable array subscript) |
|
|
|
| `b41c669` | `v-TP3-CALC-ARRVAR` | `ERR 1 14330` (write field width) |
|
|
| `b41c669` | `v-TP3-CALC-ARRVAR` | `ERR 1 14330` (write field width) |
|
|
|
| `099f8fd` | `v-TP3-CALC-WIDTH` | `ERR 102 15026` (2-D subscript + `with`) |
|
|
| `099f8fd` | `v-TP3-CALC-WIDTH` | `ERR 102 15026` (2-D subscript + `with`) |
|
|
|
-| `a559843` | `v-TP3-CALC-WITH` | **`ERR 102 15131`** (set assignment to a field) |
|
|
|
|
|
|
|
+| `a559843` | `v-TP3-CALC-WITH` | `ERR 102 15131` (set assignment to a field) |
|
|
|
|
|
+| `21ef4e1` | `v-TP3-CALC-SETFIELD` | **`ERR 102 15201`** (string field through DI) |
|
|
|
|
|
|
|
|
-- **Code HEAD** `a559843` (`v-TP3-CALC-WITH`); this commit only updates
|
|
|
|
|
- this document. Nothing pushed; `origin/master` is behind by fifteen code
|
|
|
|
|
|
|
+- **Code HEAD** `21ef4e1` (`v-TP3-CALC-SETFIELD`); this commit only updates
|
|
|
|
|
+ this document. Nothing pushed; `origin/master` is behind by sixteen code
|
|
|
commits. Two non-ladder commits in the same period are the terminal-config
|
|
commits. Two non-ladder commits in the same period are the terminal-config
|
|
|
work (`v-TP3-TERMCFG`) and the editor key map (`v-TP3-EDITORKEYS`); they do
|
|
work (`v-TP3-TERMCFG`) and the editor key map (`v-TP3-EDITORKEYS`); they do
|
|
|
not move the ladder and are documented in `TERMINAL.md`.
|
|
not move the ladder and are documented in `TERMINAL.md`.
|
|
@@ -540,10 +542,10 @@ Exec86):
|
|
|
byte-for-byte the same for INTEGER locals, so the compile matrix would have
|
|
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.
|
|
been green and only `t40_readln` (and later CALC) would have noticed.
|
|
|
- **Verified baseline, run on the code HEAD above:** `./tests/run_all.sh` →
|
|
- **Verified baseline, run on the code HEAD above:** `./tests/run_all.sh` →
|
|
|
- **OVERALL: ALL PASS**, compile matrix **78/78**, CALC ladder **1/1** at
|
|
|
|
|
- `ERR 102 15131`, terminal config **4/4**, 64 `.COM` linked and **67 executed
|
|
|
|
|
|
|
+ **OVERALL: ALL PASS**, compile matrix **79/79**, CALC ladder **1/1** at
|
|
|
|
|
+ `ERR 102 15201`, terminal config **4/4**, 64 `.COM` linked and **68 executed
|
|
|
under both qemu and Exec86** (`t64_arrays` is compile-only: its image is past
|
|
under both qemu and Exec86** (`t64_arrays` is compile-only: its image is past
|
|
|
- the 8 KB boot-sector read). `tests/nonvacuity.sh`: **99 ok, 0 failed**.
|
|
|
|
|
|
|
+ the 8 KB boot-sector read). `tests/nonvacuity.sh`: **101 ok, 0 failed**.
|
|
|
The runtime is 878 bytes (wrintw added; the golden was re-blessed).
|
|
The runtime is 878 bytes (wrintw added; the golden was re-blessed).
|
|
|
- **`tests/nonvacuity.sh`:** re-run after this commit's cases (the set
|
|
- **`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
|
|
membership bit among them); see the commit message for the count. It is not in
|
|
@@ -580,8 +582,8 @@ Exec86):
|
|
|
|
|
|
|
|
### Next session — the concrete plan
|
|
### Next session — the concrete plan
|
|
|
|
|
|
|
|
-The ladder is at `ERR 102 15131`, **`CellStatus := [Txt]` — a set
|
|
|
|
|
-assignment to a record field**. Everything
|
|
|
|
|
|
|
+The ladder is at `ERR 102 15201`, **`Contents := ''` — a string
|
|
|
|
|
+assignment to a record field through DI**. Everything
|
|
|
below is ordered by what the ladder will hit next, not by the original stage
|
|
below is ordered by what the ladder will hit next, not by the original stage
|
|
|
numbers (the measurements have reordered them repeatedly). Each item is the
|
|
numbers (the measurements have reordered them repeatedly). Each item is the
|
|
|
same shape as the rungs already landed: one focused change, one fixture that is
|
|
same shape as the rungs already landed: one focused change, one fixture that is
|
|
@@ -647,13 +649,13 @@ Then the two that are *outside* the ladder and gate the goal as stated:
|
|
|
`Value:FW:DEC`, which waits for real support) and widths on
|
|
`Value:FW:DEC`, which waits for real support) and widths on
|
|
|
CHAR/BOOLEAN/STRING, which are loud today.
|
|
CHAR/BOOLEAN/STRING, which are loud today.
|
|
|
|
|
|
|
|
-15. **SET and STRING assignments to a record field — THE NEXT RUNG (15131).**
|
|
|
|
|
- `CellStatus := [Txt]` is the first: the target is `set of Attributes`
|
|
|
|
|
- (one byte), so the RHS set constructor must take its base/size from the
|
|
|
|
|
- TARGET rather than defaulting to 32-byte `set of Char`, and the store
|
|
|
|
|
- must go through DI. `Contents := ''`/`Contents := S` follows on the same
|
|
|
|
|
- addressing with a counted-string copy (or a runtime entry taking a DI
|
|
|
|
|
- destination). Both are loud today.
|
|
|
|
|
|
|
+15. **Record-field writes — SET is DONE, STRING is THE NEXT RUNG (15201).**
|
|
|
|
|
+ Set constructors now take base/size from the target and store through DI
|
|
|
|
|
+ (`v-TP3-CALC-SETFIELD`), and `in` tests a field's byte at run time.
|
|
|
|
|
+ `Contents := ''` (and later `Contents := S`) needs a counted-string copy
|
|
|
|
|
+ to a DI address: the literal path can store <len><chars> directly; a
|
|
|
|
|
+ string variable source can push DI as strstore's destination. The field
|
|
|
|
|
+ is 71 bytes, so the copy truncates at 70 characters.
|
|
|
|
|
|
|
|
14. **Raise the execution harness's read.** `tests/exec/bootcom.s` reads 16
|
|
14. **Raise the execution harness's read.** `tests/exec/bootcom.s` reads 16
|
|
|
sectors (8192 bytes); `t64_arrays` is already compile-only for that reason,
|
|
sectors (8192 bytes); `t64_arrays` is already compile-only for that reason,
|