[parenscript-devel] BLOCK/RETURN-FROM

Daniel Gackle danielgackle at gmail.com
Tue Jun 7 18:51:40 UTC 2011


Red,

While we're sort of on the topic... I recall that Vladimir liked your
implementation of conditions in PS quite a bit. If you have a minute, would
you care to summarize the basic idea? Alternatively I could just not be lazy
and go look at it :)

Daniel


On Tue, Jun 7, 2011 at 12:07 PM, Red Daly <reddaly at gmail.com> wrote:

> 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
>>
>
>
> _______________________________________________
> 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/20110607/bebe965f/attachment.html>


More information about the parenscript-devel mailing list