From: Richard M. Stallman Date: Sun, 10 Sep 2006 17:47:39 +0000 (+0000) Subject: (pushnew): Use add-to-list when convenient. X-Git-Tag: emacs-pretest-22.0.90~638 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6b34950fadc011554873fb9f2f421b261235916f;p=emacs.git (pushnew): Use add-to-list when convenient. --- diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index 222407f86f2..9db3fc027d6 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -149,13 +149,20 @@ be a symbol, or any generalized variable allowed by `setf'." (if (symbolp place) (list 'setq place (list 'cons x place)) (list 'callf2 'cons x place))) +(defvar pushnew-internal) + (defmacro pushnew (x place &rest keys) "(pushnew X PLACE): insert X at the head of the list if not already there. Like (push X PLACE), except that the list is unmodified if X is `eql' to an element already on the list. \nKeywords supported: :test :test-not :key \n(fn X PLACE [KEYWORD VALUE]...)" - (if (symbolp place) (list 'setq place (list* 'adjoin x place keys)) + (if (symbolp place) + (if (null keys) + `(let ((pushnew-internal ,place)) + (add-to-list 'pushnew-internal x nil 'eql) + (setq ,place pushnew-internal)) + (list 'setq place (list* 'adjoin x place keys))) (list* 'callf2 'adjoin x place keys))) (defun cl-set-elt (seq n val)