diff --git a/init/conditions.lisp b/init/conditions.lisp index a22b35bc235d27e3503770e3b4b1ca04f3a98885..5de2e2fa364e20f3d68fbeda155386bfdcd55488 100644 --- a/init/conditions.lisp +++ b/init/conditions.lisp @@ -1,8 +1,8 @@ ;; GSL errors ;; Liam Healy Sat Mar 4 2006 - 18:33 -;; Time-stamp: <2010-07-20 17:55:56EDT conditions.lisp> +;; Time-stamp: <2015-06-02 17:38:15EDT conditions.lisp> ;; -;; Copyright 2006, 2007, 2008, 2009 Liam M. Healy +;; Copyright 2006, 2007, 2008, 2009, 2010, 2015 Liam M. Healy ;; Distributed under the terms of the GNU General Public License ;; ;; This program is free software: you can redistribute it and/or modify @@ -182,3 +182,16 @@ ;;; This insures that conditions will be signalled if GSLL is dumped ;;; in save-lisp-and-die. #+sbcl (push 'establish-handler sb-ext:*init-hooks*) + +;;; Convenience macro so user can specify a value to return for a particular error. +(export 'return-value-on-error) +(defmacro return-value-on-error (values error &body body) + "Return the value(s) (a value or list of values) in case the specified GSL error is signalled in the body." + `(restart-case + (handler-bind + ((,error + #'(lambda (condition) + (declare (ignore condition)) + (invoke-restart 'return ,@(alexandria:ensure-list values))))) + ,@body) + (return (&rest v) (apply 'values v))))