]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/cl.el
Mark 1994-07-11 change by Kevin Rodgers as tiny.
[gnu-emacs] / lisp / emacs-lisp / cl.el
index 8875366cc9c8710e1cc83b3e82264978d645b150..83dffb41b2d019c51e3ffd9826264c1689465209 100644 (file)
@@ -1,6 +1,7 @@
 ;;; cl.el --- Common Lisp extensions for Emacs -*-byte-compile-dynamic: t;-*-
 
-;; Copyright (C) 1993, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001, 2002, 2003, 2004, 2005,
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Version: 2.02
@@ -154,7 +155,11 @@ 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 ((x ,x))
+            (if (memql x ,place) ,place (setq ,place (cons x ,place))))
+       (list 'setq place (list* 'adjoin x place keys)))
     (list* 'callf2 'adjoin x place keys)))
 
 (defun cl-set-elt (seq n val)
@@ -580,9 +585,6 @@ If ALIST is non-nil, the new pairs are prepended to it."
 
 ;;; Miscellaneous.
 
-(put 'cl-assertion-failed 'error-conditions '(error))
-(put 'cl-assertion-failed 'error-message "Assertion failed")
-
 (defvar cl-fake-autoloads nil
   "Non-nil means don't make CL functions autoload.")