From 76dd30a98590f2266290a70f2e3d4d272c092310 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Sun, 10 Nov 2019 14:25:17 +0100 Subject: [PATCH] fix again comp-copy-insn --- lisp/emacs-lisp/comp.el | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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. -- 2.39.5