]> git.eshelyaron.com Git - emacs.git/commitdiff
fix again comp-copy-insn
authorAndrea Corallo <akrl@sdf.org>
Sun, 10 Nov 2019 13:25:17 +0000 (14:25 +0100)
committerAndrea Corallo <akrl@sdf.org>
Wed, 1 Jan 2020 10:38:02 +0000 (11:38 +0100)
lisp/emacs-lisp/comp.el

index b450f4d6f68d379dd543cc423781416d48e704ab..5283e57669ffbfa6749d0860d0f8a9e419a8bf0a 100644 (file)
@@ -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.