[ansi-test-devel] [PATCH] test TAGBODY/GO inside recursive call
Tobias C. Rittweiler
tcr at freebits.de
Fri Sep 18 22:03:05 UTC 2009
The comment explains it:
;;; The next two cases test for a wonderfully twisted issue. GO tags
;;; are lexical this means that even within a recursive call,
;;; i.e. within a different extent of the _same_ TAGBODY form, GO must
;;; transfer control to the original (outermost) TAGBODY form, and not
;;; the immediately enclosing one.
I.e. the following must return :GOOD
(labels ((frob (continuation)
(tagbody
(if (not continuation)
(frob #'(lambda () (go :foo)))
(funcall continuation))
;; We should never return here.
(return-from frob :bad)
:foo
(return-from frob :good))))
(frob nil))
Idea and implementation mostly due to Erik Huelsmann.
First test for the interpreter; second for the compiler.
SBCL, CCL, and CLISP get both cases right.
ABCL returns :BAR for the first one. Gets second correct.
ECL gets first correct, but errors out on the second one.
-T.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tagbody-21-and-22.diff
Type: text/x-diff
Size: 1534 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/ansi-test-devel/attachments/20090919/e1df0b4c/attachment.diff>
More information about the ansi-test-devel
mailing list