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