[parenscript-devel] Implicit return for function bodies

sblist at me.com sblist at me.com
Thu Nov 5 21:09:46 UTC 2009


Here's another:

PS> (ps (lambda ()
           (case x
             (a 'eh)
             (b 'bee))))
=>
"function () {
     switch (x) {
     case a:
         return 'eh';
     case b:
         return 'bee';
     };
};"

... ok, so far so good.

PS> (ps (lambda ()
           (macrolet ((x () 1))
             (case (x)
               (a 'eh)
               (b 'bee)))))
=>
"function () {
     return switch (1) {
     case a:
         'eh';
         break;
     case b:
         'bee';
     };
};"

- Scott


On 2009-11-04, at 10:33 PM, Vladimir Sedach wrote:

> I just pushed a patch that should fix that. Thanks for the bug report!
>
> Vladimir
>
> 2009/11/4  <sblist at me.com>:
>> Hi Vladimir,
>>
>> Thanks a lot for doing this work, it'll be seriously great to have
>> implicit return!
>>
>> On 2009-11-04, at 12:57 PM, Vladimir Sedach wrote:
>>
>>> Hello,
>>>
>>> Many of you have been asking for this for a long time, and based on
>>> feedback (as well as my own experience) the lack of this feature has
>>> been the biggest cause of bugs in PS code, so it's with a bit of joy
>>> that I just pushed out a patch to add implicit returns to PS  
>>> functions
>>> (including lambdas and flet/labels) to the repository just now.  
>>> Please
>>> try it out and report any bugs you find!
>>
>> The first one I encountered was to do with the special return
>> handling for case/switch.
>>
>> 1) The return special form assumes the wrong switch/case
>> structure for these statements, it should be:
>>
>> (switch-case what &rest clauses)
>>
>> rather than:
>>
>> (switch-case what clauses)
>>
>> ...in both the destructing code and the reconstruction of the
>> clauses, having been updated with the return statement.
>>
>> 2) The return special form needs to handle break forms in
>> switch/case; rather than wrapping a break statement, it
>> should remove it and wrap the previous expression in the
>> return statement. Here's the (incorrect) output that I'm getting
>> after having fixed the first issue:
>>
>> (ps (lambda ()  (case 1 (0 1) (otherwise 2))))
>>
>> "function () {
>>    switch (1) {
>>    case 0:
>>        1;
>>        return break;
>>    default:
>>        return 2;
>>    };
>> };"
>>
>> I think we want to see:
>>
>> "function () {
>>    switch (1) {
>>    case 0:
>>        return 1;
>>    default:
>>        return 2;
>>    };
>> };"
>>
>> - Scott
>>
>> _______________________________________________
>> parenscript-devel mailing list
>> parenscript-devel at common-lisp.net
>> http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
>>
>
> _______________________________________________
> parenscript-devel mailing list
> parenscript-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel





More information about the parenscript-devel mailing list