Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defmacro trap-errors (&rest forms)
- (with-unique-names (rval errors lambda-arg-condition)
- `(let (,lambda-arg-condition
- ,rval
- (,errors nil))
- (declare (ignorable ,lambda-arg-condition ,rval ,errors))
- (handler-bind ((error #'(lambda (,lambda-arg-condition)
- (push ,lambda-arg-condition ,errors)
- (continue ,lambda-arg-condition))))
- (locally
- (declare (sb-ext:disable-package-locks common-lisp:error))
- (macrolet ((error (datum &rest args)
- `(cerror "Continue" ,datum ,@args)))
- (declare (sb-ext:enable-package-locks common-lisp:error))
- (setq ,rval (progn ,@forms)))))
- (values ,rval ,errors))))
- ;;; ==>
- EDITOR> (multiple-value-bind (rval errors)
- (trap-errors
- (validate foo))
- (declare (ignorable rval))
- (loop for err in errors
- do (format *standard-output* "~&; ~A~%" err)))
- ; FIELD-ALIAS is a required field that requires a value. It is empty, thus has failed validation.
- ; FIELD-ADDRESS is a required field that requires a value. It is empty, thus has failed validation.
- ; FIELD-MAX_CHECK_ATTEMPTS is a required field that requires a value. It is empty, thus has failed validation.
- ; FIELD-CHECK_PERIOD is a required field that requires a value. It is empty, thus has failed validation.
- ; FIELD-CONTACTS is a required field that requires a value. It is empty, thus has failed validation.
- ; FIELD-CONTACT_GROUPS is a required field that requires a value. It is empty, thus has failed validation.
- ; FIELD-NOTIFICATION_INTERVAL is a required field that requires a value. It is empty, thus has failed validation.
- ; FIELD-NOTIFICATION_PERIOD is a required field that requires a value. It is empty, thus has failed validation.
- NIL
Advertisement