diff lisp/subr.el @ 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 9d351e5869c8
children 41129d3d126b
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.