From: Nikodemus S. <nik...@ra...> - 2010-03-28 17:56:00
|
On 24 March 2010 15:16, Nikodemus Siivola <nik...@ra...> wrote: > Attached is my first cut, which makes > > (defun baz (x) (unwind-protect (setf x (quux x)) (setf x (quux x)))) > > non-consing. Unless I discover something terribly wrong about this, I > will commit this as 1.0.37.something-small. Something terribly wrong: (defun quux (x) (list :quux x)) (defun cleanup (x) (list :cleanup x)) (defun baz (x) (unwind-protect (setf x (quux x)) (setf x (cleanup x))) x) (baz t) ; => (:QUUX T) should be (:cleanup (:quux t)) Cleanups are not in the same frame as the protected forms. Cheers, -- Nikodemus |