+
+(test-ps-js ps-js-target-version-keyword-test1
+ (defun foo (x y &key bar baz))
+ "function foo(x, y) {
+ var x1 = Array.prototype.indexOf.call(arguments, 'bar', 2);
+ var bar = -1 == x1 ? null : arguments[x1 + 1];
+ var x2 = Array.prototype.indexOf.call(arguments, 'baz', 2);
+ var baz = -1 == x2 ? null : arguments[x2 + 1];
+};"
+ :js-target-version 1.6)
+
+(test-ps-js nested-if-expressions1
+ (return (if (if x y z) a b))
+ "return (x ? y : z) ? a : b;")
+
+(test-ps-js nested-if-expressions2
+ (return (if x y (if z a b)))
+ "return x ? y : (z ? a : b);")
+
+(test-ps-js let1
+ (let (x)
+ (+ x x))
+ "var x = null;
+x + x;")
+
+(test-ps-js let2
+ (let ((x 1))
+ (+ x x))
+ "var x = 1;
+x + x;")
+
+(test-ps-js let-x-x
+ (let ((x (1+ x)))
+ (+ x x))
+ "var x1 = x + 1;
+x1 + x1;")
+
+(test-ps-js let3
+ (let ((x 1)
+ (y 2))
+ (+ x x))
+ "var x = 1;
+var y = 2;
+x + x;")
+
+(test-ps-js let4
+ (let ((x 1)
+ (y (1+ x)))
+ (+ x y))
+ "var x1 = 1;
+var y = x + 1;
+x1 + y;")
+
+(test-ps-js let5
+ (let ((x 1))
+ (+ x 1)
+ (let ((x (+ x 5)))
+ (+ x 1))
+ (+ x 1))
+ "var x = 1;
+x + 1;
+var x1 = x + 5;
+x1 + 1;
+x + 1;")
+
+(test-ps-js let6
+ (let ((x 2))
+ (let ((x 1)
+ (y (1+ x)))
+ (+ x y)))
+ "var x = 2;
+var x1 = 1;
+var y = x + 1;
+x1 + y;")
+
+(test-ps-js let-exp1
+ (lambda ()
+ (return (let (x) (+ x x))))
+ "function () {
+ var x;
+ return (x = null, x + x);
+};")
+
+(test-ps-js let*1
+ (let* ((x 1)) (+ x x))
+"var x = 1;
+x + x;")
+
+(test-ps-js let*2
+ (let* ((x 1)
+ (y (+ x 2)))
+ (+ x y))
+ "var x = 1;
+var y = x + 2;
+x + y;")
+
+(test-ps-js let*3
+ (let ((x 3))
+ (let* ((x 1)
+ (y (+ x 2)))
+ (+ x y)))
+ "var x = 3;
+var x1 = 1;
+var y = x1 + 2;
+x1 + y;")
+
+(test-ps-js let*4
+ (let ((x 3))
+ (let* ((y (+ x 2))
+ (x 1))
+ (+ x y)))
+ "var x = 3;
+var y = x + 2;
+var x1 = 1;
+x1 + y;")
+
+(test-ps-js symbol-macrolet-var
+ (symbol-macrolet ((x y))
+ (var x))
+ "var y;")
+
+(test-ps-js setf-conditional1
+ (setf x (unless (null a) (1+ a)))
+ "x = a != null ? a + 1 : null;")
+
+(test-ps-js setf-let1
+ (setf x (let ((a 1)) a))
+ "x = (a = 1, a);")
+
+(test-ps-js setf-let2
+ (setf x (let ((a (foo)))
+ (unless (null a)
+ (1+ a))))
+ "x = (a = foo(), a != null ? a + 1 : null);")
+
+(test-ps-js symbol-macro-env1
+ (symbol-macrolet ((bar 1))
+ (macrolet ((bar (x y) `(+ ,x ,y)))
+ (bar bar bar)))
+ "1 + 1;")
+
+(test-ps-js symbol-macrolet-fun1
+ (symbol-macrolet ((baz +))
+ (baz 1 2))
+ "baz(1, 2);")
+
+(test-ps-js lisp2-namespaces1
+ (let ((list nil))
+ (setf list (list 1 2 3)))
+ "var list = null;
+list = [1, 2, 3];")
+
+(test-ps-js let-shadows-symbol-macrolet
+ (symbol-macrolet ((x y))
+ (let ((x 1))
+ (+ x x))
+ (+ x x))
+ "var x1 = 1;
+x1 + x1;
+y + y;")
+
+(test-ps-js let-rename-optimization1
+ (let ((x 1))
+ (+ x x))
+ "var x = 1;
+x + x;")
+
+(test-ps-js let-rename-optimization2
+ (lambda (x)
+ (let ((x (+ 1 x)))
+ (return x)))
+ "function (x) {
+ var x1 = 1 + x;
+ return x1;
+};")