From dcf452393bf51285b41f2439f049988d6f1ad74e Mon Sep 17 00:00:00 2001 From: Boris Smilga Date: Sun, 4 Jan 2015 15:25:57 +0300 Subject: [PATCH] Fixed unparenthesized comma-sequences in for(;;) variable initializer expressions inside blocks. E. g. (ps (lambda (y) (for ((x (let ((x0 (foo y))) (bar x0)))) () () (xyzzy x)))) was producing (function (y) { var x0; for (var x = x0 = foo(y), bar(x0); ; ) { xyzzy(x); }; }); A JavaScript parser would then treat the comma as the separator in VariableDeclarationListNoIn production, so bar(x0) would be occuring in the position of an Identifier, which is a syntax error (see ECMA-262 ed. 5.1, ss. 12.6.3, 12.2). --- src/printer.lisp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/printer.lisp b/src/printer.lisp index 5a3b476..e3485a2 100644 --- a/src/printer.lisp +++ b/src/printer.lisp @@ -324,7 +324,8 @@ vice-versa.") "for (" (loop for ((var-name . var-init) . remaining) on vars for decl = "var " then "" do - (psw decl (symbol-to-js-string var-name) " = ") (ps-print var-init) + (psw decl (symbol-to-js-string var-name) " = ") + (print-op-argument 'ps-js:= var-init) (when remaining (psw ", "))) "; " (loop for (test . remaining) on tests do -- 2.11.4.GIT