Mercurial > emacs
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