|
|
|
|
@ -131,6 +131,23 @@ other commands including the multi-form ::after.
|
|
|
|
|
noted: count-position operands reject doubles where start/end accept them |
|
|
|
|
('lseq 1.5' errors, 'lseq 1.5 3.5' works) - a value-dependent constraint no |
|
|
|
|
lexical type expresses. |
|
|
|
|
- ::after cancelid/cancelscript discrimination (user suggestion 2026-07-13: |
|
|
|
|
per-version probe of the id shape + an id type "starting with after#"). |
|
|
|
|
Probed on 9.0.3 and 8.6.11: the id shape is after#N on both (hardcoded |
|
|
|
|
"after#%d" in tclTimer.c; harvest at define time anyway via the safe |
|
|
|
|
create+cancel probe 'set id [after 999999 {}]; after cancel $id' - G-054 |
|
|
|
|
technique, no event loop needed, no output). NO new type needed: the |
|
|
|
|
existing stringstartswith(after#) type-alternate is validate-live (not just |
|
|
|
|
synopsis display) - typing the cancelid form's id (and the info form's id) |
|
|
|
|
with it makes 'after cancel someid' resolve cleanly to cancelscript, |
|
|
|
|
matching real behaviour (real 'after cancel <non-id>' is a silent |
|
|
|
|
script-match no-op; 'after info <non-id>' errors at runtime - model-reject |
|
|
|
|
vs real-reject stays parity-true). RESIDUAL (truthful): 'after cancel |
|
|
|
|
after#12' remains ambiguous in the model because a script can also be |
|
|
|
|
after#-shaped - real Tcl resolves by id LIVENESS at runtime (tries id |
|
|
|
|
first, falls back to script match), which no static type expresses; the |
|
|
|
|
G-074 sanction then covers exactly that id-shaped witness rather than the |
|
|
|
|
whole form pair. |
|
|
|
|
- TIP 746 (user-flagged 2026-07-12, |
|
|
|
|
https://core.tcl-lang.org/tips/doc/trunk/tip/746.md) removes the expr |
|
|
|
|
behaviour from lseq operands in Tcl 9.1: the lseq model's number|expr operand |
|
|
|
|
|