From: Andrea Corallo Date: Sun, 10 Nov 2019 13:25:17 +0000 (+0100) Subject: fix again comp-copy-insn X-Git-Tag: emacs-28.0.90~2727^2~1019 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=76dd30a98590f2266290a70f2e3d4d272c092310;p=emacs.git fix again comp-copy-insn --- diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index b450f4d6f68..5283e57669f 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -1439,13 +1439,20 @@ PRE-LAMBDA and POST-LAMBDA are called in pre or post-order if non nil." (defun comp-copy-insn (insn) "Deep copy INSN." - (cond - ((and (listp insn) (listp (cdr insn))) - (mapcar #'comp-copy-insn insn)) - ((consp insn) ; Pair - (cons (car insn) (cdr insn))) - ((comp-mvar-p insn) (copy-comp-mvar insn)) - (t insn))) + ;; Adapted from `copy-tree'. + (if (consp insn) + (let (result) + (while (consp insn) + (let ((newcar (car insn))) + (if (or (consp (car insn)) (comp-mvar-p (car insn))) + (setq newcar (comp-copy-insn (car insn)))) + (push newcar result)) + (setq insn (cdr insn))) + (nconc (nreverse result) + (if (comp-mvar-p insn) (comp-copy-insn insn) insn))) + (if (comp-mvar-p insn) + (copy-comp-mvar insn) + insn))) (defun comp-basic-const-propagate () "Propagate simple constants for setimm operands.