At one point I had this implemented using try-catch unless Parenscript's compiler could prove (rather naively) that the return-from clause was always executed.  I am usually way behind the official branch, and I'm not sure if my changes ever made it in, and if they did if this case is a bug.  Anyway it would do something like

function foo() {
   try {
   var bar = function () {
       throw { 'ps-return-foo341' : 42 };
   };
    bar(); }
   catch (e) {
      if ('ps-return-foo341' in e)
         return e['ps-return-foo341'];
      else
           throw e;
};

verbose, but it should always work.  other try-catch tricks allow lisp-style conditions, which I detailed in a post in this list within the year.  in case of group interest the relevant code is available at https://github.com/gonzojive/paren-psos and https://github.com/gonzojive/parenscript

Viva Parenscript!

Red

On Tue, Jun 7, 2011 at 11:40 PM, <sblist@me.com> wrote:
Hi,

I was wondering if the BLOCK/RETURN-FROM feature in PS intends
to support the following case:

(ps (defun foo ()
         (flet ((bar () (return-from foo 42)))
           (bar))))

=>

WARNING: Returning from unknown block FOO
"function foo() {
   var bar = function () {
       return 42;
   };
   return bar();
};"

In order to try and get around the warning, I tried this:

(ps (defun baz ()
         (block foo
           (flet ((bar () (return-from foo 42)))
             (bar)))))

=>

WARNING: Returning from unknown block FOO
"function baz() {
   var bar = function () {
       return 42;
   };
   return bar();
};"

but that didn't seem to work. Any ideas on how to achieve lexical
return here?

       - Scott


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