From e67d2740ede296b8871d3300fa74212a677d6075 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20V=C3=A1zquez?= Date: Fri, 5 Jul 2013 03:50:31 +0200 Subject: [PATCH] Migrate MULTIPLE-VALUE-CALL --- src/compiler.lisp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/compiler.lisp b/src/compiler.lisp index 866cea2..a6f435f 100644 --- a/src/compiler.lisp +++ b/src/compiler.lisp @@ -896,23 +896,23 @@ `(return |ret|))) (define-compilation multiple-value-call (func-form &rest forms) - (js!selfcall - "var func = " (ls-compile func-form) ";" - "var args = [" (if *multiple-value-p* "values" "pv") ", 0];" - "return " - (js!selfcall - "var values = mv;" - "var vs;" - `(code - ,@(mapcar (lambda (form) - `(code "vs = " ,(ls-compile form t) ";" - "if (typeof vs === 'object' && 'multiple-value' in vs)" - (code " args = args.concat(vs);" ) - " else " - (code "args.push(vs);" ))) - forms)) - "args[1] = args.length-2;" - "return func.apply(window, args);" ) ";" )) + (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)))) + (define-compilation multiple-value-prog1 (first-form &rest forms) (js!selfcall -- 1.7.10.4