diff --git a/TODO.md b/TODO.md index 8a33eff..c7df2ef 100644 --- a/TODO.md +++ b/TODO.md @@ -633,7 +633,7 @@ Order by what unblocks the most, and by what does not need `libakgl` to grow fir | ~~G. Graphics~~ | ~~`GRAPHIC`, `DRAW`, `BOX`, `CIRCLE`, `PAINT`, `COLOR`, `SCALE`, `SSHAPE`, `GSHAPE`, `LOCATE`~~ | **done** — `src/runtime_graphics.c`, `tests/graphics_verbs.c` | | H. Sprites | `SPRITE`, `MOVSPR`, `SPRCOLOR`, `SPRDEF`, `SPRSAV`, `COLLISION` | `libakgl` sprite/actor API — check before filing | | ~~I. Audio~~ | ~~`PLAY`, `SOUND`, `ENVELOPE`, `VOL`, `TEMPO`~~ | **done** — `src/runtime_audio.c`, `src/play.c`, `tests/audio_verbs.c` | -| I′. Audio, still gapped | `FILTER`, `SOUND`'s sweep arguments | `libakgl` has neither; both refused with `AKBASIC_ERR_DEVICE`, both filed in §7 | +| I′. Audio, still gapped | `FILTER` | `libakgl` has no filter stage and SDL3 supplies no primitive; refused with `AKBASIC_ERR_DEVICE`. `SOUND`'s sweep arguments used to be here and landed with `akgl_audio_sweep` in libakgl 0.3.0 | | ~~E′. Console input~~ | ~~`GET`, `GETKEY`, `SCNCLR`~~ | **done** — `src/runtime_input.c`, `tests/input_verbs.c` | | J. Machine | `SYS`, `FETCH`, `STASH`, `POKE`/`PEEK` variants | nothing | @@ -683,12 +683,13 @@ Also on the queue, from the reference's own defect list: it is waiting for, so a `NEXT` on the same line as its `FOR` is never reached. Fixing it means restructuring control flow to work on statements rather than lines, which is a deliberate piece of work and wants its own commit. Group A's `DO`/`LOOP` will meet the same wall. -- **Array references in parameter lists** (`READ A$(0), B#`) currently fail to parse. This is - the *same collision* §6 item 13 was, one field along: an identifier keeps its subscript list - on `.right`, which is also where an argument list chains its arguments. That item was fixed by - moving a unary leaf's operand to `.left`; the same move very likely works here, since an - identifier leaf has no other use for the field either. Fix in `akbasic_parser_primary` and - `akbasic_leaf_first_subscript`. +- ~~**Array references in parameter lists**~~ **Done**, and it turned out to be §6 item 13 a + third time rather than a separate defect. An identifier's subscript list moved to `.expr`, and + `akbasic_ASTLeaf` grew a `next` field so an argument list chains through a link of its own. + That last part is the real fix: the reference chains arguments through each argument's own + `.right`, and *every* leaf type that can be an argument already uses `.right` for something, + so moving one operand out of the way only shifted the collision along. Covered by + `tests/language/arrays_in_parameter_lists.bas` and `tests/runtime_evaluate.c`. ---