On Sun, Nov 1, 2009 at 9:34 AM, Vladimir Sedach <vsedach@gmail.com> wrote:
> Maybe this limitation can be avoided by having an mv-returning function A
> set a global variable "mvFunctionReturner" equal to the function A and a
> mv-receiver can check that mvFunctionReturner is set according to the
> function it called expecting multiple values.  Does this scheme miss any
> cases?

What about anonymous functions?

It would require that an anonymous function being called in Parenscript source be stored in a variable in the caller.  for example, take the (implicitly returning) functions below:

(defun foo ()
  (multiple-value-bind (x y)
     (funcall (lambda (z) (values z (+ z 17))) 4)))

=>
function foo () {

var gensymed_lambda = function(z) { mvFunctionReturner = arguments.callee; mv = [ z+ 17]; return z; }
// bind the results of calling the lambda
var x = gensymed_lambda(4);

var y = null;
if (gensymed_lambda === mvFunctionReturner)
    y = mv[0];

// now implicitly return the same values
mvFunctionReturner = arguments.callee; // arguments.callee === foo unless foo is renamed
return x;
}

You can deal with anonymous functions basically by naming them, at least in this scheme.
 


I like this idea, and I think it can be made to work. Have you looked
at whether Linj tries to do multiple return values?

Good idea.  Linj seems to be defunct and inaccessible, unfortunately.
 
I suspect someone
somewhere has thought about and possibly solved this problem before.

Vladimir


Thanks,
Red
 

> Anyway I have thought a little bit about this and I thought I would pass it
> off to the rest of the Parenscripters as a thought experiment.  Assume you
> can do a lot more semantic analysis than Parenscript currently does and
> transform the compiled source however you want.  But any compiled functions
> must still be able to be treated as normal Javascript functions and all and
> only functions that should return multiple values appear to return them.
>
> Cheers,
> Red
>
> _______________________________________________
> parenscript-devel mailing list
> parenscript-devel@common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
>
>

_______________________________________________
parenscript-devel mailing list
parenscript-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel