(loop for idx in indices do
(psw #\[) (ps-print idx) (psw #\])))
+(defvar *lexical-bindings* nil)
+
+(defun rename-js-variable (name)
+ (or (cdr (assoc name *lexical-bindings*))
+ name))
+
+(defprinter js:let (variables expression)
+ (let ((*lexical-bindings*
+ (append (mapcar (lambda (var)
+ (cons var (if (assoc var *lexical-bindings*)
+ (ps-gensym var)
+ var)))
+ variables))))
+ (ps-print expression)))
+
(defprinter js:variable (var)
- (psw (symbol-to-js-string var)))
+ (psw (symbol-to-js-string (rename-js-variable var))))
;;; arithmetic operators
(defun parenthesize-print (ps-form)
(defprinter js:var (var-name &rest var-value)
(psw "var ")
- (psw (symbol-to-js-string var-name))
+ (ps-print var-name)
(when var-value
(psw " = ")
(ps-print (car var-value))))