From: Andrea Corallo Date: Tue, 15 Dec 2020 16:45:53 +0000 (+0100) Subject: * Allow for modifying insn-cell inside `comp-loop-insn-in-block' X-Git-Tag: emacs-28.0.90~2727^2~246 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=23791cf74da9c2e6369f2c15ef180ef2a8c21656;p=emacs.git * Allow for modifying insn-cell inside `comp-loop-insn-in-block' * lisp/emacs-lisp/comp.el (comp-loop-insn-in-block): Update. --- diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 8791759aaf5..e8db2383c41 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -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)))))) ;;; spill-lap pass specific code.