Here's a really strange one.<div><br></div><div>We have a form like the following. I've stripped it down for brevity, so it looks weird:</div><div><br></div><div><div>(loop :for time :from time1 :below time2 :do</div>
<div> (when (foo</div><div> (ë ()</div><div> (bar</div><div> (ë () (blah)) time))</div><div> time)</div><div> (break)))</div></div><div><br></div><div>It used to generate this:</div>
<div><br></div><div><div>for (var time = time1; time < time2; time += 1) {</div><div> if (foo(function () {</div><div> return barr(function () {</div><div> return blah();</div><div> }, time);</div>
<div> }, time)) {</div><div> break;</div><div> };</div><div>};</div></div><div><br></div><div>But now it generates this:</div><div><br></div><div><div>for (var time = time1; time < time2; time += 1) {</div>
<div> with ({ time : time }) {</div><div> if (foo(function () {</div><div> return bar(function () {</div><div> return blah();</div><div> }, time);</div><div> }, time)) {</div>
<div> break;</div><div> };</div><div> };</div><div>};</div></div><div><br></div><div>That is one weird WITH clause in there! No doubt it has something</div><div>to do with lexical scoping magic going on under the hood. But </div>
<div>I definitely don't want it in a performance-critical loop.</div><div><br></div><div>Daniel</div>