[parenscript-devel] Over-aggressive expressification?
Vladimir Sedach
vsedach at gmail.com
Sat Dec 11 04:29:09 UTC 2010
Whether a return-of-conditional gets compiled as a
return-of-expression or transformed into a statement with a return
inside of it is decided on a heuristic basis.
It used to be based on s-exp nesting depth, but then you'd have things
like return x ? foo.bar.baz[x][y] : null being turned into verbose
statements.
To fix your example, I've changed the heuristic to be based on
compiling into a statement first and counting how many lines that
expression would span if printed. That gives better results while
being simple, but there's still a couple of cases where it doesn't
feel right.
Vladimir
2010/12/7 Daniel Gackle <danielgackle at gmail.com>:
> I noticed the JS for a function like this has changed:
> (defun blah ()
> (when (some-condition)
> (foo)
> (bar)
> (baz)))
> It used to give this:
> function blah() {
> if (someCondition()) {
> foo();
> bar();
> return baz();
> };
> };
> Now it produces this:
> function blah() {
> return someCondition() ? (foo(), barr(), baz()) : null;
> };
> I think it's worth questioning whether this deviates too far from PS's
> goal of readable JS. I can give examples from our codebase
> where this approach produces very complex composite expressions
> that are quite unreadable. It doesn't bother me too much, since
> I understand what PS is doing and can always look at the source
> code. But it certainly sacrifices readability/debuggability. Too far?
> Daniel
> _______________________________________________
> 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