[parenscript-devel] BLOCK/RETURN-FROM

Red Daly reddaly at gmail.com
Tue Jun 7 18:07:09 UTC 2011


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 at 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 at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/parenscript-devel/attachments/20110608/83c2e39c/attachment.html>


More information about the parenscript-devel mailing list