| author | Stefan Monnier <monnier@iro.umontreal.ca> | 2012-08-11 10:02:20 (GMT) |
|---|---|---|
| committer | Katsumi Yamaoka <yamaoka@jpl.org> | 2012-08-11 10:02:20 (GMT) |
| commit | 240d70a44d7e3b45e668f639fca8837eb12ef567 (patch) (side-by-side diff) | |
| tree | 2c73921996caa3354daa0fe6c86154da196fc13b | |
| parent | 690ecab203b06b79e3fd0c59cdce5188da57e7cb (diff) | |
| download | gnus-240d70a44d7e3b45e668f639fca8837eb12ef567.zip | |
gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-groups): Use defsetf
| -rw-r--r-- | lisp/ChangeLog | 7 | ||||
| -rw-r--r-- | lisp/gnus-agent.el | 42 |
2 files changed, 15 insertions, 34 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b8abc61..bf380d0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,4 +1,9 @@ -2012-08-10 Daiki Ueno <ueno@unixuser.org> +2012-08-10 Stefan Monnier <monnier@iro.umontreal.ca> + + * gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-groups): + Use defsetf. + +2012-08-10 Daiki Ueno <ueno@unixuser.org> * auth-source.el: (auth-source-plstore-search) (auth-source-secrets-search): Ignore :require and :type in search spec. diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 525008c..60d6102 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -354,23 +354,11 @@ manipulated as follows: (func LIST): Returns VALUE1 (setf (func LIST) NEW_VALUE1): Replaces VALUE1 with NEW_VALUE1." `(progn (defmacro ,name (category) - (list (quote cdr) (list (quote assq) - (quote (quote ,prop-name)) category))) - - (define-setf-method ,name (category) - (let* ((--category--temp-- (make-symbol "--category--")) - (--value--temp-- (make-symbol "--value--"))) - (list (list --category--temp--) ; temporary-variables - (list category) ; value-forms - (list --value--temp--) ; store-variables - (let* ((category --category--temp--) ; store-form - (value --value--temp--)) - (list (quote gnus-agent-cat-set-property) - category - (quote (quote ,prop-name)) - value)) - (list (quote ,name) --category--temp--) ; access-form - ))))) + (list 'cdr (list 'assq '',prop-name category))) + + (defsetf ,name (category) (value) + (list 'gnus-agent-cat-set-property + category '',prop-name value)))) ) (defmacro gnus-agent-cat-name (category) @@ -398,22 +386,10 @@ manipulated as follows: gnus-agent-cat-enable-undownloaded-faces agent-enable-undownloaded-faces) -;; This form is equivalent to defsetf except that it calls make-symbol -;; whereas defsetf calls gensym (Using gensym creates a run-time -;; dependency on the CL library). - -(eval-and-compile - (define-setf-method gnus-agent-cat-groups (category) - (let* ((--category--temp-- (make-symbol "--category--")) - (--groups--temp-- (make-symbol "--groups--"))) - (list (list --category--temp--) - (list category) - (list --groups--temp--) - (let* ((category --category--temp--) - (groups --groups--temp--)) - (list (quote gnus-agent-set-cat-groups) category groups)) - (list (quote gnus-agent-cat-groups) --category--temp--)))) - ) +;; This form may expand to code that uses CL functions at run-time, +;; but that's OK since those functions will only ever be called from +;; something like `setf', so only when CL is loaded anyway. +(defsetf gnus-agent-cat-groups gnus-agent-set-cat-groups) (defun gnus-agent-set-cat-groups (category groups) (unless (eq groups 'ignore) |
