Small optimization: (progn x) === x
authorDavid Vazquez <davazp@gmail.com>
Sun, 27 Jan 2013 14:00:32 +0000 (14:00 +0000)
committerDavid Vazquez <davazp@gmail.com>
Sun, 27 Jan 2013 14:00:32 +0000 (14:00 +0000)
ecmalisp.lisp

index 53449f2..95b3678 100644 (file)
@@ -1352,7 +1352,9 @@ function mv(){
      (ls-compile ,form)))
 
 (define-compilation progn (&rest body)
-  (js!selfcall (ls-compile-block body t)))
+  (if (null (cdr body))
+      (ls-compile (car body) *multiple-value-p*)
+      (js!selfcall (ls-compile-block body t))))
 
 (defun special-variable-p (x)
   (and (claimp x 'variable 'special) t))
@@ -1611,6 +1613,7 @@ function mv(){
     "return args;" *newline*))
 
 
+
 ;;; A little backquote implementation without optimizations of any
 ;;; kind for ecmalisp.
 (defun backquote-expand-1 (form)
@@ -2025,7 +2028,7 @@ function mv(){
 (defun ls-compile-block (sexps &optional return-last-p)
   (if return-last-p
       (concat (ls-compile-block (butlast sexps))
-              "return "(ls-compile (car (last sexps)) *multiple-value-p*) ";")
+              "return " (ls-compile (car (last sexps)) *multiple-value-p*) ";")
       (join-trailing
        (remove-if #'null-or-empty-p (mapcar #'ls-compile sexps))
        (concat ";" *newline*))))