Mercurial > emacs
changeset 45740:4e576724db9f
(copy-list): Moved to cl.el.
(copy-tree): Don't use copy-list or cl-pop.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 10 Jun 2002 09:01:08 +0000 |
parents | af30a5644ebc |
children | b2a7c08cddcf |
files | lisp/subr.el |
diffstat | 1 files changed, 12 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/subr.el Mon Jun 10 09:00:52 2002 +0000 +++ b/lisp/subr.el Mon Jun 10 09:01:08 2002 +0000 @@ -191,32 +191,26 @@ (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.