"Attila Lendvai" attila.lendvai@gmail.com writes:
i'd be happy to push this, but imho the extra argument is unnecessary. i understand that it is a tiny bit more flexible in rare situations like:
(unwind-protect-case (aborted-p) (random 42) (:always (when aborted-p ...)))
but those are mostly covered by the three :always, :normal, :abort cases.
It's not for this because you can write this one as
(unwind-protect-case () (...) (:always (do-something)) (:abort (handle-abort)) (:always (do-something-else)))
It's for the case where you want to _delegate_ the work to a function:
(unwind-protect-case (aborted-p) (...) (:always (perform-cleanup aborted-p ...)))
Where PERFORM-CLEANUP does different things depending on the ABORTED-P flag.
The reason for this is for the case where you want to use UNWIND-PROTECT-CASE in a macroexpansion, and don't want to blow up the macroexpansion with too much code.
and it introduces an extra argument for unwind-protect-case which makes it look less like unwind-protect.
I actually consider it to be a feature because it's easier to distinguish these two syntactically.
-T.