minor optimization to restart-case
authorChristophe Rhodes <c.rhodes@gold.ac.uk>
Fri, 13 Sep 2013 13:30:13 +0000 (14:30 +0100)
committerChristophe Rhodes <c.rhodes@gold.ac.uk>
Fri, 13 Sep 2013 13:47:40 +0000 (14:47 +0100)
commitfa8bdac034de1d709f3f95d09f3d0607f88e46ad
treee5174292444b1393b36658b82c4e2505fccd8c0f
parent7dab8f88e2912ec839794ee78151ea50825d84a4
minor optimization to restart-case

The generated non-local transfer functions go to a tag which will
always be in scope whenever the restart can be invoked, so wrap the
GO in a scary (safety 0) optimization declaration.  This fixes
lp#1023721 (but not the issue raised in comment #1, which would be
solved naturally if lp#383078 is addressed).

Include a test which deliberately breaks the normal dynamic-extent
lifetime for restarts; restarts generated by RESTART-CASE and friends
in fact have indefinite extent, even though once they're out of the
dynamic-extent of their creating/binding operator you can't really do
anything with them (INVOKE-RESTART signals a control-error if the
restart given is not active, and there's no way to reactivate a
restart).  However, the temptation to make the restart function
have dynamic-extent allocation must be resisted, because of the
indefinite lifetime of the restart object itself.
NEWS
src/code/defboot.lisp
tests/compiler.pure.lisp