Hi Vladimir,
On 2009-11-27, at 5:24 PM, Vladimir Sedach wrote:
Just pushed patches that fix RETURNing of cond and symbol-macrolet. Let me know if you catch anything else amiss.
Thank you, Vladimir
2009/11/23 sblist@me.com:
On 2009-11-05, at 12:20 PM, sblist@me.com wrote: ...
This is still the case as of the latest commit, so code like this fails:
(ps (lambda () (cond ((foo? x) (loop for y in x do (foo y))) ((bar? x) x) (t t))))
This form now emits valid JS. However, using DOLIST instead of LOOP here causes a syntax error:
(ps (lambda () (cond ((foo? x) (dolist (y x) (foo y))) ((bar? x) x) (t t)))) => "function () { if (foowhat(x)) { return for (var y = null, _js_idx1288 = 0; _js_idx1288 < x.length; _js_i\ dx1288 += 1) { y = x[_js_idx1288]; foo(y); }; } else if (barwhat(x)) { return x; } else { return true; }; };"
Here is some more curious DOLIST behavior:
SKYSHEET> (ps (lambda () (dolist (arg args) (foo arg)))) "function () { for (var arg = null, _js_idx1289 = 0; _js_idx1289 < args.length; _js_idx1289\ += 1) { arg = args[_js_idx1289]; foo(arg); }; };" SKYSHEET> (ps (lambda () (let ((x y)) (dolist (arg args) (foo arg))))) "function () { var x = y; return for (var arg = null, _js_idx1290 = 0; _js_idx1290 < args.length; _js_\ idx1290 += 1) { arg = args[_js_idx1290]; foo(arg); }; };"
- Scott