This bug is fixed in the patch I just committed which changes the way special operators work.
In the process of changing the special operators and fixing this bug, I came to the conclusion that there is actually no way to implement a magic "expressionize" function for the compiler that will do the right thing for all forms - the necessary transformations depend both on the outer and inner special operators in different ways. I think it's possible to avoid the complexity of having a product of all possible cases for this, and even if it's not, the special operators can be grouped into only a few common classes, so things are not that bad. Please check out the latest version of Parenscript and see if the new code breaks anything. Vladimir 2010/10/1 <[email protected]>: > It appears that some commit between ac408014 and b9dc8d1a (maybe > 2f9fa1976a?) breaks the compilation of CASE forms in a function's tail > position when some (but not all) branches in a body form contain a RETURN. > > PS> (ps (defun foo () > (case x > ("bar" (if y (return t) nil)) > ("baz" nil)))) > "function foo() { > switch (x) { > case 'bar': > if (y) { > return true; > }; > //----------------- missing break; here > case 'baz': > return null; > }; > };" > > Scott > > _______________________________________________ > parenscript-devel mailing list > [email protected] > http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel > _______________________________________________ parenscript-devel mailing list [email protected] http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
