(or (cdr (assoc name *lexical-bindings*))
name))
-(defprinter js:let (variables expression)
+(defprinter js:let (variables &body body)
(let ((*lexical-bindings*
(append (mapcar (lambda (var)
(cons var (if (assoc var *lexical-bindings*)
(ps-gensym var)
var)))
variables))))
- (ps-print expression)))
+ (loop for (exp . remaining) on body do
+ (ps-print exp) (when remaining (psw ";") (newline-and-indent)))))
(defprinter js:variable (var)
(psw (symbol-to-js-string (rename-js-variable var))))
`(var ,name ,@(when value-provided? (list value))))
(define-ps-special-form let (bindings &body body)
- `(js:let ,(mapcar #'car bindings)
- ,(ps-compile `(progn
- ,@(mapcar (lambda (bind)
- `(var ,(car bind) ,(cadr bind)))
- bindings)
- ,@body))))
+ `(js:let ,(mapcar #'car bindings)
+ ,@(let ((body-forms (if compile-expression?
+ `((progn
+ ,@(mapcar (lambda (bind)
+ `(var ,(car bind) ,(cadr bind)))
+ bindings)
+ ,@body))
+ `(,@(mapcar (lambda (bind)
+ `(var ,(car bind) ,(cadr bind)))
+ bindings)
+ ,@body))))
+ (mapcar #'ps-compile body-forms))))
(defpsmacro let* (bindings &body body)
(if bindings