diff --git a/lib/tcl/runtime.sx b/lib/tcl/runtime.sx index 48861596..b1665224 100644 --- a/lib/tcl/runtime.sx +++ b/lib/tcl/runtime.sx @@ -3544,6 +3544,22 @@ (tcl-event-step interp (- target-ms now)) target-ms))))) +; Look up a Tcl var by name, returning nil instead of erroring if missing. +; Handles `::var` global-prefix routing the same way tcl-var-get does. +(define + tcl-vwait-lookup + (fn + (interp name) + (if + (tcl-global-ref? name) + (let + ((root-frame + (let ((stack (get interp :frame-stack))) + (if (= 0 (len stack)) (get interp :frame) (first stack)))) + (gname (tcl-strip-global name))) + (frame-lookup root-frame gname)) + (frame-lookup (get interp :frame) name)))) + (define tcl-cmd-vwait (fn @@ -3554,7 +3570,7 @@ (let ((name (first args))) (let - ((initial (frame-lookup (get interp :frame) name))) + ((initial (tcl-vwait-lookup interp name))) (assoc (tcl-vwait-loop interp name initial) :result "")))))) (define @@ -3562,7 +3578,7 @@ (fn (interp name initial) (let - ((cur (frame-lookup (get interp :frame) name))) + ((cur (tcl-vwait-lookup interp name))) (if (and (not (nil? cur)) (not (equal? cur initial))) interp