aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/subr.el15
1 files changed, 9 insertions, 6 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index a32fb968365..ce9b44c6ef9 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -419,12 +419,15 @@ Of several `equal' occurrences of an element in LIST, the first
419one is kept." 419one is kept."
420 (if (> (length list) 100) 420 (if (> (length list) 100)
421 (let ((hash (make-hash-table :test #'equal)) 421 (let ((hash (make-hash-table :test #'equal))
422 res) 422 (tail list)
423 (dolist (elt list) 423 elt retail)
424 (unless (gethash elt hash) 424 (puthash (car list) t hash)
425 (puthash elt elt hash) 425 (while (setq retail (cdr tail))
426 (push elt res))) 426 (setq elt (car retail))
427 (setcdr list (cdr (nreverse res)))) 427 (if (gethash elt hash)
428 (setcdr tail (cdr retail))
429 (puthash elt t hash))
430 (setq tail retail)))
428 (let ((tail list)) 431 (let ((tail list))
429 (while tail 432 (while tail
430 (setcdr tail (delete (car tail) (cdr tail))) 433 (setcdr tail (delete (car tail) (cdr tail)))