WIP: compiler.lisp uses a explicit back-end representation
[jscl.git] / src / compiler-codegen.lisp
index fbb3952..129f892 100644 (file)
   (let ((op1 (car args))
         (op2 (cadr args)))
     (case op
+      (code
+       (js-format "~a" (apply #'code args)))
       ;; Function call
       (call
        (js-expr (car args))
      (destructuring-bind (&body body) (cdr form)
        (cond
          ((null body)           '(empty))
-         ((null (cdr body))     (car body))
+         ((null (cdr body))     (js-expand-stmt (car body)))
          (t                     `(group ,@(cdr form))))))
     (t
      form)))
             (js-expr form)
             (js-format ";"))
           (case (car form)
+            (code
+             (js-format "~a" (apply #'code (cdr form))))
             (empty
              (unless (and (consp parent) (eq (car parent) 'group))
                (js-format ";")))
                  (js-format " else ")
                  (js-stmt false))))
             (group
-             (let ((in-group-p (and (consp parent) (eq (car parent) 'group))))
+             (let ((in-group-p
+                    (or (null parent)
+                        (and (consp parent) (eq (car parent) 'group)))))
                (unless  in-group-p (js-format "{"))
                (mapc #'js-stmt (cdr form))
                (unless in-group-p (js-format "}"))))