]> git.eshelyaron.com Git - emacs.git/commitdiff
(pushnew): Use add-to-list when convenient.
authorRichard M. Stallman <rms@gnu.org>
Sun, 10 Sep 2006 17:47:39 +0000 (17:47 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 10 Sep 2006 17:47:39 +0000 (17:47 +0000)
lisp/emacs-lisp/cl.el

index 222407f86f228ffb6d62e39cb53b2ebbe6c4aa15..9db3fc027d6e9211cdad7958fea048af82d71af6 100644 (file)
@@ -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)