From 46a0693c5f0bc0906cbb8537ab4e997d60c65f9f Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Fri, 31 Jul 2026 12:10:03 -0400 Subject: [PATCH] Re-scope the remaining language queue against what the work turned up Group A is blocked on block skipping that works by statement rather than by source line, and RESTORE is blocked on a DATA pointer that does not exist -- which is a live defect rather than only a missing verb. Both were found while doing other work and neither is skippable by the group that needs it. Co-Authored-By: Claude Opus 5 (1M context) --- TODO.md | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/TODO.md b/TODO.md index bf0ffb8..c2bde74 100644 --- a/TODO.md +++ b/TODO.md @@ -1125,18 +1125,29 @@ What remains, in priority order: 2. ~~**A line editor for the akgl sink.**~~ **Done** — `readline` in `src/sink_akgl.c`, over the keystroke ring, borrowing frames from the host through an `akbasic_AkglPump`. It cannot type a shifted character, which is `libakgl` item 10 rather than work outstanding here. -3. **§4 — the language completion work queue.** Groups G and I, the `GET`/`GETKEY`/`SCNCLR` - part of E, and **multiple statements per line** are done. What is left is groups A, B, D, F - and J, none of which need anything from `libakgl`. +3. **§4 — the language completion work queue**, and it is the only substantial thing left. + Done: groups G and I, the `GET`/`GETKEY`/`SCNCLR` part of E, group B, multiple statements + per line, and array references in parameter lists. Left: groups A, D, F and J, plus + `RESTORE` and `RENUMBER` out of B and the sprite group H. None needs anything from + `libakgl` except H. - **Do group A next, and expect it to cost more than the table suggests.** Multiple statements - per line turned up the wall it will hit: the `waitingForCommand` model skips forward *by - source line*, so a whole loop written on one line - (`FOR I# = 1 TO 3 : PRINT I# : NEXT I#`) never reaches its `NEXT`. §4 records it as a known - limitation rather than a defect, because it is inherited structure and not a slip — but - `DO`/`LOOP`/`WHILE`/`UNTIL` are exactly the verbs people write on one line, so group A - probably has to move block skipping from lines to statements before it starts. That is a - deliberate restructure and wants its own commit and its own test, ahead of any verb. + **Two pieces of structural work come before the verbs, and both were found rather than + guessed.** Neither is a verb and neither can be skipped by the group that needs it: + + - **Block skipping works by source line, and group A needs it to work by statement.** + `waitingForCommand` skips forward to a verb one *line* at a time, so a whole loop written + on one line — `FOR I# = 1 TO 3 : PRINT I# : NEXT I#` — never reaches its `NEXT`. That is + inherited structure rather than a slip, and it did not matter until a line could hold more + than one statement. `DO`/`LOOP`/`WHILE`/`UNTIL` are exactly the verbs people write on one + line, so group A starts here or it ships something that does not work. + - **`READ` has no DATA pointer, and `RESTORE` is the verb that needs one.** §4 has the + detail; the short version is that `READ` skips forward to the next `DATA` *reached in + execution order*, so a `DATA` line placed before its `READ` is never found at all and a + second `READ` re-reads the same line. It is a live defect, not only a blocked verb. + + Ordering suggestion, unchanged in spirit from the original: A (after the restructure), then + D and J, which are self-contained, then F, which is 21 verbs of `aksl_f*` and mostly + mechanical. H needs a look at `libakgl`'s sprite and actor API before anything is filed. 4. ~~**CI does not cover `-DAKBASIC_WITH_AKGL=ON`.**~~ **Done** — the `akgl_build` job in `.gitea/workflows/ci.yaml`. It turned out much cheaper than the deferral assumed, and the two reasons are worth keeping because both were guesses that measurement corrected: