The WITH clause is there to make sure that lambdas capture a fresh binding of loop-local variables per iteration (otherwise they'd all share the same binding which would get incremented on every loop iteration).
I'm guessing the reason your code doesn't run across this bug is that the lambda that captures time gets called once per iteration and discarded.
Vladimir
2010/12/7 Daniel Gackle danielgackle@gmail.com:
Here's a really strange one. We have a form like the following. I've stripped it down for brevity, so it looks weird: (loop :for time :from time1 :below time2 :do (when (foo (λ () (bar (λ () (blah)) time)) time) (break))) It used to generate this: for (var time = time1; time < time2; time += 1) { if (foo(function () { return barr(function () { return blah(); }, time); }, time)) { break; }; }; But now it generates this: for (var time = time1; time < time2; time += 1) { with ({ time : time }) { if (foo(function () { return bar(function () { return blah(); }, time); }, time)) { break; }; }; }; That is one weird WITH clause in there! No doubt it has something to do with lexical scoping magic going on under the hood. But I definitely don't want it in a performance-critical loop. Daniel _______________________________________________ parenscript-devel mailing list parenscript-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel