Hi Dan,
I sketched an argument why extra instrumentation isn't needed in these two cases. If that argument is wrong (which it may well be) then we should be able to give examples where the pure global-variable (GV) design fails in the absence of such implementation. That is:
(1) An example where an uninstrumented throw causes the GV implementation to be wrong; and
I thought that something like the following could be developed into a counterexample:
(progn (defun foo (x) (try (if (= 0 x) (values 1 2 3) (bar)) (:catch (e) 27)))
(defun bar () (foo 0) (throw 13))
(multiple-value-bind (a b c) (foo 1) (list a b c)))
But because of implicit returns, I don't see how.
I guess the implementation is safe in that respect.
Vladimir