Made if-expressions return null instead of undefined when else clause wasn't specified.
authorVladimir Sedach <vsedach@gmail.com>
Thu, 23 Aug 2007 21:22:16 +0000 (21:22 +0000)
committerVladimir Sedach <vsedach@gmail.com>
Thu, 23 Aug 2007 21:22:16 +0000 (21:22 +0000)
src/js-macrology.lisp
src/js-translation.lisp
t/ps-tests.lisp

index 263f696..31d84b9 100644 (file)
                       (when else (compile-parenscript-form `(progn ,else)))))
     (:expression (list 'js-expression-if (compile-parenscript-form test :expecting :expression)
                        (compile-parenscript-form then :expecting :expression)
-                       (when else (compile-parenscript-form else :expecting :expression))))))
+                       (compile-parenscript-form else :expecting :expression)))))
 
 (define-ps-special-form switch (expecting test-expr &rest clauses)
   (let ((clauses (mapcar (lambda (clause)
index 92f6bde..2a05b9b 100644 (file)
@@ -317,11 +317,9 @@ vice-versa.")
       (parenthesize-print then)
       (ps-print then))
   (write-string " : ")
-  (if else
-      (if (>= (expression-precedence else) (op-precedence 'js-expression-if))
-          (parenthesize-print else)
-          (ps-print else))
-      (write-string "undefined")))
+  (if (>= (expression-precedence else) (op-precedence 'js-expression-if))
+      (parenthesize-print else)
+      (ps-print else)))
 
 (defprinter js-assign (lhs rhs)
   (ps-print lhs)
index 401cab6..8bd6ebf 100644 (file)
@@ -347,3 +347,11 @@ x = 2 + sideEffect() + x + 5;")
     'blah';
     x * y;
 }")
+
+(test-ps-js if-exp-without-else-returns-null
+  (return (if x 1))
+  "return x ? 1 : null")
+
+(test-ps-js progn-expression-single-statement
+  (return (progn (* x y)))
+  "return x * y")