Skip to content
Snippets Groups Projects
Commit 9969bdf7 authored by Liam M. Healy's avatar Liam M. Healy
Browse files

New macro #'return-value-on-error

parent 95db48a3
No related branches found
No related tags found
No related merge requests found
;; GSL errors ;; GSL errors
;; Liam Healy Sat Mar 4 2006 - 18:33 ;; 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 ;; Distributed under the terms of the GNU General Public License
;; ;;
;; This program is free software: you can redistribute it and/or modify ;; This program is free software: you can redistribute it and/or modify
...@@ -182,3 +182,16 @@ ...@@ -182,3 +182,16 @@
;;; This insures that conditions will be signalled if GSLL is dumped ;;; This insures that conditions will be signalled if GSLL is dumped
;;; in save-lisp-and-die. ;;; in save-lisp-and-die.
#+sbcl (push 'establish-handler sb-ext:*init-hooks*) #+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))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment