From 06e8bd7d4c31ba5b10cf5c18a13c5370045cea71 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Thu, 12 May 2016 10:10:01 -0300 Subject: [PATCH] validate-setq takes any even number of args --- validate.el | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/validate.el b/validate.el index 286835e5b..7ca4b0a95 100644 --- a/validate.el +++ b/validate.el @@ -5,7 +5,7 @@ ;; Author: Artur Malabarba ;; Keywords: lisp ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5")) -;; Version: 0.4 +;; Version: 0.5 ;;; Commentary: ;; @@ -188,13 +188,23 @@ with `validate-value'. NOERROR is passed to `validate-value'." (lambda (val) (validate-value val (custom-variable-type symbol) 'noerror)))) -(defmacro validate-setq (symbol value) +(defmacro validate-setq (&rest svs) "Like `setq', but throw an error if validation fails. -VALUE is validated against SYMBOL's custom type." - `(if (boundp ',symbol) - (setq ,symbol (validate-value ,value (custom-variable-type ',symbol))) - (user-error "Trying to validate a variable that's not defined yet: `%s'.\nYou need to require the package before validating" - ',symbol))) +VALUE is validated against SYMBOL's custom type. + +\(fn [SYM VAL] ...)" + (let ((out)) + (while svs + (let ((symbol (pop svs)) + (value (if (not svs) + (error "`validate-setq' takes an even number of arguments") + (pop svs)))) + (push `(if (boundp ',symbol) + (setq ,symbol (validate-value ,value (custom-variable-type ',symbol))) + (user-error "Trying to validate a variable that's not defined yet: `%s'.\nYou need to require the package before validating" + ',symbol)) + out))) + `(progn ,@(reverse out)))) (provide 'validate) ;;; validate.el ends here -- 2.39.2