<div>I just ran into a strange bug where the gensym'd suffixes on loop</div><div>control variables change to the wrong thing. The bug appears to be</div><div>triggered by a (RETURN) form inside a loop that has more than one</div>

<div>FOR clause. For each extra clause, the suffixes increase by one.</div><div>I haven't tried to track down the cause of the bug, but I did just push </div><div>a failing test (LOOP-PARALLEL-CLAUSES-WITH-RETURN) to</div>

<div>illustrate it.</div><div><br></div><div>  (defun-js foo () </div><div>    (loop :for i :from 0 :below 10 :for x = (* i 10)</div><div>      :when (> i 5) :do (return x)</div><div>      :collect i))</div><div>  </div>

<div>=> (note added comments below):</div><div><br></div><div>  function foo() {</div><div>      return (function () {</div><div>          var collect3170 = [];</div><div>          var loopResultVarSet3171 = null;</div>

<div>          var loopResultVar3172 = null;</div><div>          for (var i = 0; i < 10; i += 1) {</div><div>              var x3171 = i * 10;</div><div>              if (i > 5) {</div><div>                  loopResultVarSet3172 = true;  // <---- suffix should be 3171, not 3172</div>

<div>                  loopResultVar3173 = x3171;    // <---- suffix should be 3172, not 3173</div><div>                  break;</div><div>              };</div><div>              collect3170.push(i);</div><div>          };</div>

<div>          if (loopResultVarSet3171) {</div><div>              return loopResultVar3172;</div><div>          };</div><div>          return collect3170;</div><div>      })();</div><div>  };</div><div><br></div><div>Daniel</div>

<div><br></div>