lispm

<3 macros

Mar 30th, 2012
695
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.87 KB | None | 0 0
  1. (defmacro trap-errors (&rest forms)
  2.   (with-unique-names (rval errors lambda-arg-condition)
  3.     `(let (,lambda-arg-condition
  4.            ,rval
  5.            (,errors nil))
  6.        (declare (ignorable ,lambda-arg-condition ,rval ,errors))
  7.        (handler-bind ((error #'(lambda (,lambda-arg-condition)
  8.                                  (push ,lambda-arg-condition ,errors)
  9.                                  (continue ,lambda-arg-condition))))
  10.          (locally
  11.              (declare (sb-ext:disable-package-locks common-lisp:error))
  12.            (macrolet ((error (datum &rest args)
  13.                         `(cerror "Continue" ,datum ,@args)))
  14.              (declare (sb-ext:enable-package-locks common-lisp:error))
  15.              (setq ,rval (progn ,@forms)))))
  16.        (values ,rval ,errors))))
  17.  
  18.  
  19. ;;; ==>
  20.  
  21. EDITOR> (multiple-value-bind (rval errors)
  22.             (trap-errors
  23.              (validate foo))
  24.           (declare (ignorable rval))
  25.           (loop for err in errors
  26.                 do (format *standard-output* "~&; ~A~%" err)))
  27. ; FIELD-ALIAS is a required field that requires a value.  It is empty, thus has failed validation.
  28. ; FIELD-ADDRESS is a required field that requires a value.  It is empty, thus has failed validation.
  29. ; FIELD-MAX_CHECK_ATTEMPTS is a required field that requires a value.  It is empty, thus has failed validation.
  30. ; FIELD-CHECK_PERIOD is a required field that requires a value.  It is empty, thus has failed validation.
  31. ; FIELD-CONTACTS is a required field that requires a value.  It is empty, thus has failed validation.
  32. ; FIELD-CONTACT_GROUPS is a required field that requires a value.  It is empty, thus has failed validation.
  33. ; FIELD-NOTIFICATION_INTERVAL is a required field that requires a value.  It is empty, thus has failed validation.
  34. ; FIELD-NOTIFICATION_PERIOD is a required field that requires a value.  It is empty, thus has failed validation.
  35. NIL
Advertisement