diff --git a/plans/tcl-on-sx.md b/plans/tcl-on-sx.md index 7c0065c6..47ac45d9 100644 --- a/plans/tcl-on-sx.md +++ b/plans/tcl-on-sx.md @@ -76,13 +76,13 @@ Core mapping: - [x] 60+ tests in `lib/tcl/tests/eval.sx` ### Phase 3 — proc + uplevel + upvar (THE SHOWCASE) -- [ ] `proc name args body` — register user-defined command; args supports defaults `{name default}` and rest `args` -- [ ] Frame stack: each proc call pushes a frame with locals dict; pop on return -- [ ] `uplevel ?level? script` — evaluate `script` in level-N frame's env; default level is 1 (caller). `#0` is global, `#1` is relative-1 -- [ ] `upvar ?level? otherVar localVar ?…?` — alias localVar to a variable in level-N frame; reads/writes go through the alias -- [ ] `info level`, `info level N`, `info frame`, `info vars`, `info locals`, `info globals`, `info commands`, `info procs`, `info args`, `info body` -- [ ] `global var ?…?` — alias to global frame (sugar for `upvar #0 var var`) -- [ ] `variable name ?value?` — namespace-scoped global +- [x] `proc name args body` — register user-defined command; args supports defaults `{name default}` and rest `args` +- [x] Frame stack: each proc call pushes a frame with locals dict; pop on return +- [x] `uplevel ?level? script` — evaluate `script` in level-N frame's env; default level is 1 (caller). `#0` is global, `#1` is relative-1 +- [x] `upvar ?level? otherVar localVar ?…?` — alias localVar to a variable in level-N frame; reads/writes go through the alias +- [x] `info level`, `info level N`, `info frame`, `info vars`, `info locals`, `info globals`, `info commands`, `info procs`, `info args`, `info body` +- [x] `global var ?…?` — alias to global frame (sugar for `upvar #0 var var`) +- [x] `variable name ?value?` — namespace-scoped global - [ ] Classic programs in `lib/tcl/tests/programs/`: - [ ] `for-each-line.tcl` — define your own loop construct using `uplevel` - [ ] `assert.tcl` — assertion macro that reports caller's line @@ -120,6 +120,7 @@ Core mapping: _Newest first._ +- 2026-05-06: Phase 3 proc+uplevel+upvar+info+global — frame stack, isolated proc scope, alias-following var access, 225 tests green (67 parse + 158 eval) - 2026-05-06: Phase 2 dict commands — 13 subcommands (create/get/set/unset/exists/keys/values/size/for/update/merge/incr/append), 206 tests green (67 parse + 139 eval) - 2026-05-06: Phase 2 list commands — 12 commands (list/lindex/lrange/llength/lreverse/lsearch/lsort/lreplace/linsert/concat/split/join), 182 tests green (67 parse + 115 eval) - 2026-05-06: Phase 2 string commands — 16 subcommands (length/index/range/compare/match/toupper/tolower/trim/map/repeat/first/last/is/cat), 156 tests green (67 parse + 89 eval)