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:
parent
6b25a2f544
commit
cfebd4db43
30
lisp/subr.el
30
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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user