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) <noreply@anthropic.com>
This commit is contained in:
33
TODO.md
33
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:
|
||||
|
||||
Reference in New Issue
Block a user