# HG changeset patch # User Richard M. Stallman # Date 1023699668 0 # Node ID 4e576724db9fc7b29850b673989bf657769a08d0 # Parent af30a5644ebc5c1ce06bc9d36fa49cadaf36579c (copy-list): Moved to cl.el. (copy-tree): Don't use copy-list or cl-pop. diff -r af30a5644ebc -r 4e576724db9f lisp/subr.el --- 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.