1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-02-02 20:16:25 +00:00

(copy-list): Moved to cl.el.

(copy-tree): Don't use copy-list or cl-pop.
This commit is contained in:
Richard M. Stallman 2002-06-10 09:01:08 +00:00
parent 6b25a2f544
commit cfebd4db43

View File

@ -191,32 +191,26 @@ The comparison is done with `eq'."
(delq elt (copy-sequence list))
list))
(defun copy-list (list)
"Return a copy of a list, which may be a dotted list.
The elements of the list are not copied, just the list structure itself."
(if (consp list)
(let ((res nil))
(while (consp list) (push (pop list) res))
(prog1 (nreverse res) (setcdr res list)))
(car list)))
(defun copy-tree (tree &optional vecp)
"Make a copy of TREE.
If TREE is a cons cell, this recursively copies both its car and its cdr.
Contrast to copy-sequence, which copies only along the cdrs. With second
Contrast to `copy-sequence', which copies only along the cdrs. With second
argument VECP, this copies vectors as well as conses."
(if (consp tree)
(let ((p (setq tree (copy-list tree))))
(while (consp p)
(if (or (consp (car p)) (and vecp (vectorp (car p))))
(setcar p (copy-tree (car p) vecp)))
(or (listp (cdr p)) (setcdr p (copy-tree (cdr p) vecp)))
(cl-pop p)))
(let (result)
(while (consp tree)
(let ((newcar (car tree)))
(if (or (consp (car tree)) (and vecp (vectorp (car tree))))
(setq newcar (copy-tree (car tree) vecp)))
(push newcar result))
(setq tree (cdr tree)))
(nreconc result tree))
(if (and vecp (vectorp tree))
(let ((i (length (setq tree (copy-sequence tree)))))
(while (>= (setq i (1- i)) 0)
(aset tree i (copy-tree (aref tree i) vecp))))))
tree)
(aset tree i (copy-tree (aref tree i) vecp)))
tree)
tree)))
(defun assoc-default (key alist &optional test default)
"Find object KEY in a pseudo-alist ALIST.