]> git.eshelyaron.com Git - emacs.git/commitdiff
* Allow for modifying insn-cell inside `comp-loop-insn-in-block'
authorAndrea Corallo <akrl@sdf.org>
Tue, 15 Dec 2020 16:45:53 +0000 (17:45 +0100)
committerAndrea Corallo <akrl@sdf.org>
Mon, 21 Dec 2020 19:22:02 +0000 (20:22 +0100)
* lisp/emacs-lisp/comp.el (comp-loop-insn-in-block): Update.

lisp/emacs-lisp/comp.el

index 8791759aaf530953ae4ae72eeb062973425ec6b2..e8db2383c411bc0d7a54815e8149cace1d0ae695 100644 (file)
@@ -759,14 +759,15 @@ VERBOSITY is a number between 0 and 3."
 
 (defmacro comp-loop-insn-in-block (basic-block &rest body)
   "Loop over all insns in BASIC-BLOCK executing BODY.
-Inside BODY `insn' can be used to read or set the current
-instruction."
+Inside BODY `insn' and `insn-cell'can be used to read or set the
+current instruction or its cell."
   (declare (debug (form body))
            (indent defun))
-  (let ((sym-cell (gensym "cell-")))
-    `(cl-symbol-macrolet ((insn (car ,sym-cell)))
-       (cl-loop for ,sym-cell on (comp-block-insns ,basic-block)
-               do ,@body))))
+  `(cl-symbol-macrolet ((insn (car insn-cell)))
+     (let ((insn-cell (comp-block-insns ,basic-block)))
+       (while insn-cell
+         ,@body
+         (setf insn-cell (cdr insn-cell))))))
 \f
 ;;; spill-lap pass specific code.