Migrate VARIABLE-ARITMETIC-CALL
authorDavid Vázquez <davazp@gmail.com>
Fri, 5 Jul 2013 02:53:05 +0000 (04:53 +0200)
committerDavid Vázquez <davazp@gmail.com>
Fri, 5 Jul 2013 02:53:05 +0000 (04:53 +0200)
src/compiler.lisp

index 9ff6cd7..f9c1cd2 100644 (file)
         (fargs '())
         (prelude '()))
     (dolist (x args)
-      (cond
-        ((or (floatp x) (numberp x)) (push x fargs))
-        (t (let ((v (make-symbol (code "x" (incf counter)))))
-             (push v fargs)
-             (push `(code "var " ,v " = " ,(ls-compile x) ";"
-                          "if (typeof " ,v " !== 'number') throw 'Not a number!';")
-                   prelude)))))
-    (js!selfcall
-      `(code ,@(reverse prelude))
+      (if (or (floatp x) (numberp x))
+          (push x fargs)
+          (let ((v (make-symbol (concat "x" (integer-to-string (incf counter))))))
+            (push v fargs)
+            (push `(var (,v ,(ls-compile x)))
+                  prelude)
+            (push `(if (!= (typeof ,v) "number")
+                       (throw "Not a number!"))
+                  prelude))))
+    (js!selfcall*
+      `(progn ,@(reverse prelude))
       (funcall function (reverse fargs)))))