Re: Returning to top-level on error




Steven M. Haflich wrote:
> Pascal Bourguignon wrote:
>
> >>Can Lisp be told not to enter the "break loop" when encountering an
> >>error, but instead just return to the top-level?
> >
> > (ignore-errors (do-something))
>
> This is appropriate for almost any normal circumstance, but isn't
> quite bulletproof.

It ignores too much on Allegro Common Lisp, which seems to consider
control-C to be an error.

(defmacro ignore-errors (&rest forms)
(let ((block-name (gensym "IGNORE-ERRORS-BLOCK-")))
`(BLOCK ,block-name
(HANDLER-BIND (#+allegro (EXCL:INTERRUPT-SIGNAL #'ERROR)

(ERROR (LAMBDA (CONDITION)
(RETURN-FROM ,block-name
(values NIL CONDITION)))))
,@forms))))

.