From: David Vázquez Date: Fri, 5 Jul 2013 02:36:30 +0000 (+0200) Subject: Remigrate MULTIPLE-VALUE-CALL (correctly) X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=6c4af9e1276d70e4cbc66da935a229bdabce43ce;p=jscl.git Remigrate MULTIPLE-VALUE-CALL (correctly) --- diff --git a/src/compiler.lisp b/src/compiler.lisp index 23752c6..d939651 100644 --- a/src/compiler.lisp +++ b/src/compiler.lisp @@ -901,22 +901,22 @@ (define-compilation multiple-value-call (func-form &rest forms) (js!selfcall* - `(var (func ,(ls-compile func-form)) - (args ,(vector (if *multiple-value-p* '|values| '|pv|) 0)) - (|values| |mv|) - vs) - `(progn - ,@(mapcar (lambda (form) - `(progn - (= vs ,(ls-compile form t)) - (if (and (=== (typeof vs) "object") - (in "multiple-value" vs)) - (= args (call (get args "concat") vs)) - (call (get args "push") vs)))) - forms)) - `(= (property args 1) (- (get args "length") 2)) - `(return (call (get func "apply") |window| args)))) - + `(var (func ,(ls-compile func-form))) + `(var (args ,(vector (if *multiple-value-p* '|values| '|pv|) 0))) + `(return + ,(js!selfcall* + `(var (|values| |mv|)) + `(var vs) + `(progn + ,@(with-collect + (dolist (form forms) + (collect `(= vs ,(ls-compile form t))) + (collect `(if (and (=== (typeof vs) "object") + (in "multiple-value" vs)) + (= args (call (get args "concat") vs)) + (call (get args "push") vs)))))) + `(= (property args 1) (- (property args "length") 2)) + `(return (call (get func "apply") |window| args)))))) (define-compilation multiple-value-prog1 (first-form &rest forms) (js!selfcall