# HG changeset patch # User Richard M. Stallman # Date 1157910459 0 # Node ID a384943e84d7e8692aa7a881c4706baccdec1f0e # Parent 3f19250c6e6859f65b429066afbface5dbd159db (pushnew): Use add-to-list when convenient. diff -r 3f19250c6e68 -r a384943e84d7 lisp/emacs-lisp/cl.el --- a/lisp/emacs-lisp/cl.el Sun Sep 10 17:45:42 2006 +0000 +++ b/lisp/emacs-lisp/cl.el Sun Sep 10 17:47:39 2006 +0000 @@ -149,13 +149,20 @@ (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)