Selaa lähdekoodia

docs: record the string-field rung (ladder 15272)

CALC-COMPILE.md: the rung table gains v-TP3-CALC-STRFIELD (a2e5e69,
ERR 102 15272), the session state says twenty-four rungs, the baseline
is the run just made (80/80 compile, 69/69 executed under both oracles,
non-vacuity 103/103), and the next item is the REAL field, i.e. the
6-byte representation and integer-to-real conversion.

SUMMARY.md: the intro now stops at ERR 102 15272 and lists string fields
through DI among the landed features.
Eric Streit 1 päivä sitten
vanhempi
commit
3062b42b47
2 muutettua tiedostoa jossa 26 lisäystä ja 26 poistoa
  1. 21 21
      CALC-COMPILE.md
  2. 5 5
      SUMMARY.md

+ 21 - 21
CALC-COMPILE.md

@@ -97,7 +97,7 @@ Current rung (measured today, normalised position):
 
 
 | position | blocker |
 | position | blocker |
 |---|---|
 |---|---|
-| **15201** | `Contents := ''` in `Init` — a STRING assignment to a record field through DI (`ERR 102`) |
+| **15272** | `Value := 0` in `Init` — a REAL record field, 6 bytes (`ERR 102`) |
 
 
 Rungs behind it (now passed):
 Rungs behind it (now passed):
 
 
@@ -121,12 +121,13 @@ Rungs behind it (now passed):
 | 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`) |
 | 15131 | set field assignment | typed by the target; run-time `in` (`t78_setfield`) |
+| 15201 | string field through DI | `<len><chars>`, truncated (`t79_strfield`) |
 
 
 Rungs ahead:
 Rungs ahead:
 
 
 | position | blocker |
 | position | blocker |
 |---|---|
 |---|---|
-| 15201 | string assignment to a record field through DI; then the rest of `CALC.INC` |
+| 15272 | the REAL representation and integer-to-real conversion (`Value := 0`); then real arithmetic |
 
 
 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:
@@ -400,14 +401,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-three rungs are landed across three sessions**
+Last touched 2026-10-21. **Twenty-four 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, WITH with
 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**.
+n-dimensional subscripts, set-field assignment, and string fields through DI).
+The ladder row has moved from the first typed constant at 7791 to **15272,
+inside `CALC.INC`'s `Init` — `Value := 0`, a REAL record field**.
 
 
 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
@@ -437,10 +438,11 @@ Exec86):
 | `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) |
+| `21ef4e1` | `v-TP3-CALC-SETFIELD` | `ERR 102 15201` (string field through DI) |
+| `a2e5e69` | `v-TP3-CALC-STRFIELD` | **`ERR 102 15272`** (REAL field) |
 
 
-- **Code HEAD** `21ef4e1` (`v-TP3-CALC-SETFIELD`); this commit only updates
-  this document.  Nothing pushed; `origin/master` is behind by sixteen code
+- **Code HEAD** `a2e5e69` (`v-TP3-CALC-STRFIELD`); this commit only updates
+  this document.  Nothing pushed; `origin/master` is behind by seventeen 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`.
@@ -542,10 +544,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 **79/79**, CALC ladder **1/1** at
-  `ERR 102 15201`, terminal config **4/4**, 64 `.COM` linked and **68 executed
+  **OVERALL: ALL PASS**, compile matrix **80/80**, CALC ladder **1/1** at
+  `ERR 102 15272`, terminal config **4/4**, 64 `.COM` linked and **69 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`: **101 ok, 0 failed**.
+  the 8 KB boot-sector read).  `tests/nonvacuity.sh`: **103 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
@@ -582,8 +584,8 @@ Exec86):
 
 
 ### Next session — the concrete plan
 ### Next session — the concrete plan
 
 
-The ladder is at `ERR 102 15201`, **`Contents := ''` — a string
-assignment to a record field through DI**.  Everything
+The ladder is at `ERR 102 15272`, **`Value := 0` — a REAL record
+field**.  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
@@ -649,13 +651,11 @@ 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. **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.
+15. **Record-field writes — SET and STRING are DONE**
+    (`v-TP3-CALC-SETFIELD`, `v-TP3-CALC-STRFIELD`).  **The next rung is the
+    REAL field** (`Value := 0`, 15272) and it is item 7's representation work:
+    TC's 6-byte real, an integer-to-real conversion for `Value := 0`, and then
+    the arithmetic/comparison/`Str`/`Val` surface CALC's evaluator uses.
 
 
 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,

+ 5 - 5
SUMMARY.md

@@ -2037,9 +2037,9 @@ census of what `CALC.PAS` actually needs and the reference measurements from
 the original `TURBO.COM`. Two tracks run in parallel: the ladder (front-end,
 the original `TURBO.COM`. Two tracks run in parallel: the ladder (front-end,
 verifiable on small fixtures) and the layout (§3, the only thing that stops
 verifiable on small fixtures) and the layout (§3, the only thing that stops
 the compiler *emitting* a 16,560-byte program). The ratchet and front-end
 the compiler *emitting* a 16,560-byte program). The ratchet and front-end
-features through **set-field assignment** are landed: the ladder
+features through **string-field assignment** are landed: the ladder
 (`tests/calc_ladder.sh` + `tests/fixtures/calc_ladder.tsv`, run by `run_all.sh`;
 (`tests/calc_ladder.sh` + `tests/fixtures/calc_ladder.tsv`, run by `run_all.sh`;
-CALC.PAS now stops at `ERR 102` at pos 15201, `Contents := ''` in `Init`), the `{$I}` include,
+CALC.PAS now stops at `ERR 102` at pos 15272, `Value := 0` in `Init`), the `{$I}` include,
 `^X`/`#nn`, scalar typed constants, sets, enums, records (CellRec = 80),
 `^X`/`#nn`, scalar typed constants, sets, enums, records (CellRec = 80),
 subranges, arrays, element/field access, file types, string value parameters,
 subranges, arrays, element/field access, file types, string value parameters,
 `Length`, the CRT identifiers (`ClrScr`/`GotoXY`/`ClrEol`/`LowVideo`/
 `Length`, the CRT identifiers (`ClrScr`/`GotoXY`/`ClrEol`/`LowVideo`/
@@ -2048,9 +2048,9 @@ subranges, arrays, element/field access, file types, string value parameters,
 ranges (`t74_caselist`), variable array subscripts scaled by the element size
 ranges (`t74_caselist`), variable array subscripts scaled by the element size
 (`t75_arrvar`), write field widths (`t76_width`, runtime entry 20 `wrintw`),
 (`t75_arrvar`), write field widths (`t76_width`, runtime entry 20 `wrintw`),
 WITH and n-dimensional subscripts (`t77_with`), set-field assignment and
 WITH and n-dimensional subscripts (`t77_with`), set-field assignment and
-run-time `in` (`t78_setfield`), and `INT 10h`+`C6` in Exec86 (fixtures through
-`t78_setfield`). The next rung is the string assignment to a record field;
-then the remaining string
+run-time `in` (`t78_setfield`), string fields through DI (`t79_strfield`), and
+`INT 10h`+`C6` in Exec86 (fixtures through `t79_strfield`). The next rung is
+the 6-byte REAL field; then the remaining string
 builtins, file operations, variable-index subscripts + `with`, pointers, `var`
 builtins, file operations, variable-index subscripts + `with`, pointers, `var`
 params, reals, recursion, and the layout change. Items 1-4 below are
 params, reals, recursion, and the layout change. Items 1-4 below are
 independent of both.
 independent of both.