changeset 63605:99743da5284f

(add-to-ordered-list): Test membership with eq. Simplify.
author Kim F. Storm <storm@cua.dk>
date Mon, 20 Jun 2005 21:41:34 +0000
parents 4ca64c59b88b
children d8676b0b6ab9
files lisp/subr.el
diffstat 1 files changed, 9 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Mon Jun 20 21:37:47 2005 +0000
+++ b/lisp/subr.el	Mon Jun 20 21:41:34 2005 +0000
@@ -960,12 +960,11 @@
 
 (defun add-to-ordered-list (list-var element &optional order)
   "Add to the value of LIST-VAR the element ELEMENT if it isn't there yet.
-The test for presence of ELEMENT is done with `equal'.
+The test for presence of ELEMENT is done with `eq'.
 
 The resulting list is reordered so that the elements are in the
-order given by each element's numeric list order.
-Elements without a numeric list order are placed at the end of
-the list.
+order given by each element's numeric list order.  Elements
+without a numeric list order are placed at the end of the list.
 
 If the third optional argument ORDER is non-nil, set the
 element's list order to the given value.
@@ -979,16 +978,16 @@
       (put list-var 'list-order
            (setq ordering (make-hash-table :weakness 'key :test 'eq))))
     (when order
-      (puthash element order ordering))
-    (add-to-list list-var element)
+      (puthash element (and (numberp order) order) ordering))
+    (unless (memq element (symbol-value list-var))
+      (set list-var (cons element (symbol-value list-var))))
     (set list-var (sort (symbol-value list-var)
 			(lambda (a b)
 			  (let ((oa (gethash a ordering))
 				(ob (gethash b ordering)))
-			    (cond
-			     ((not oa) nil)
-			     ((not ob) t)
-			     (t (< oa ob)))))))))
+			    (if (and oa ob)
+				(< oa ob)
+			      oa)))))))
 
 
 ;;; Load history