Merge branch 'codegen' into codegen-migration
authorDavid Vázquez <davazp@gmail.com>
Sat, 22 Jun 2013 15:35:50 +0000 (17:35 +0200)
committerDavid Vázquez <davazp@gmail.com>
Sat, 22 Jun 2013 15:35:50 +0000 (17:35 +0200)
1  2 
src/compiler.lisp

diff --combined src/compiler.lisp
@@@ -50,7 -50,7 +50,7 @@@
  ;;; Wrap X with a Javascript code to convert the result from
  ;;; Javascript generalized booleans to T or NIL.
  (defun js!bool (x)
 -  `(code "(" ,x "?" ,(ls-compile t) ": " ,(ls-compile nil) ")"))
 +  `(if ,x ,(ls-compile t) ,(ls-compile nil)))
  
  ;;; Concatenate the arguments and wrap them with a self-calling
  ;;; Javascript anonymous function. It is used to make some Javascript
  ;;; It could be defined as function, but we could do some
  ;;; preprocessing in the future.
  (defmacro js!selfcall (&body body)
 -  ``(code "(function(){" ,*newline*
 -          (code ,,@body)
 -          ,*newline*
 -          "})()"))
 +  ``(call (function nil (code ,,@body))))
  
  ;;; Like CODE, but prefix each line with four spaces. Two versions
  ;;; of this function are available, because the Ecmalisp version is
             ,@(interleave (mapcar #'translate-function fnames) ",")
             "){"
             ,(ls-compile-block body t)
-            "})(" ,@cfuncs ")")))
+            "})(" ,@(interleave cfuncs ",") ")")))
  
  (define-compilation labels (definitions &rest body)
    (let* ((fnames (mapcar #'car definitions))
  " *newline*)
            ";" ,*newline*))))
  
 -(defun ls-compile (sexp &optional multiple-value-p)
 +(defun ls-compile* (sexp &optional multiple-value-p)
    (multiple-value-bind (sexp expandedp) (!macroexpand-1 sexp)
      (when expandedp
 -      (return-from ls-compile (ls-compile sexp multiple-value-p)))
 +      (return-from ls-compile* (ls-compile sexp multiple-value-p)))
      ;; The expression has been macroexpanded. Now compile it!
      (let ((*multiple-value-p* multiple-value-p))
        (cond
          (t
           (error "How should I compile `~S'?" sexp))))))
  
 +(defun ls-compile (sexp &optional multiple-value-p)
 +  `(code "(" ,(ls-compile* sexp multiple-value-p) ")"))
 +
  
  (defvar *compile-print-toplevels* nil)