From cfebd4db43b449b6bee133066de78346151a7e5c Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 10 Jun 2002 09:01:08 +0000 Subject: [PATCH] (copy-list): Moved to cl.el. (copy-tree): Don't use copy-list or cl-pop. --- lisp/subr.el | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index 7b613b42e63..b565d8ef7c9 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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. -- 2.39.5