branch: elpa/isl
commit e7c8a8765f7a57b975b3e9b24bf1cd04085bf1c5
Author: Thierry Volpiatto <[email protected]>
Commit: Thierry Volpiatto <[email protected]>

    Keep all vars in the oclosure
---
 isl.el | 38 ++++++++++++++++++--------------------
 1 file changed, 18 insertions(+), 20 deletions(-)

diff --git a/isl.el b/isl.el
index 665a813170c..40ff2438b29 100644
--- a/isl.el
+++ b/isl.el
@@ -790,6 +790,7 @@ all align operations you have to exit with RET."
 (oclosure-define isl-iterator
   "Provide iterator for isl navigation."
   (seq :type 'list :mutable t)
+  (tmp-seq :type 'list :mutable t)
   (changing-direction :type 'boolean :mutable t)
   (element :mutable t)
   (direction :type 'symbol :mutable t))
@@ -803,29 +804,26 @@ Elements of the iterator can be accessed via the 
isl-iterator--* fns.
 All the oclosure slots are mutable but the only one that can be
 changed safely is \\='changing-direction', expect weird behavior if
 you try to modify other elements externally."
-  (let ((ori seq)
-        (lis seq))
-    (oclosure-lambda (isl-iterator (seq seq)
-                                   (element nil)
-                                   (direction 'right)
-                                   (changing-direction nil))
-        ()
-      (let ((elm (car lis))
-            rev queue)
-        (when changing-direction
-          (setq rev (reverse seq)
-                queue (memql element rev)
+  (oclosure-lambda (isl-iterator (seq seq)
+                                 (tmp-seq seq)
+                                 (element nil)
+                                 (direction 'right)
+                                 (changing-direction nil))
+      ()
+    (let ((elm (car tmp-seq))
+          revlist queue)
+      (if changing-direction
+          (setq revlist (reverse seq)
+                queue (memql element revlist)
                 direction (pcase direction
                             ('left 'right)
                             ('right 'left))
-                seq (append queue (butlast rev (length queue)))
-                changing-direction nil))
-        (if (not (equal seq ori))
-            (setq lis (cddr seq)
-                  ori seq
-                  elm (cadr seq))
-          (setq lis (or (cdr lis) seq)))
-        (setq element elm)))))
+                seq (append queue (butlast revlist (length queue)))
+                tmp-seq (cddr seq)
+                elm (cadr seq)
+                changing-direction nil)
+        (setq tmp-seq (or (cdr tmp-seq) seq)))
+      (setq element elm))))
 
 (defun isl-iterator-reverse (iterator)
   "Change the direction of ITERATOR."

Reply via email to