On May 18, 2009, at 12:15 PM, Neil Mix wrote:
Ah, but delete and typeof are different in that they both *require*
an argument (terminology be damned, hopefully you understand what I
mean by that.) And return is different because it can't be used in
an expression. See my previous let x = yield-5; example -- let x =
typeof-5; is unambiguous.
I'm tempted to argue that yield should require an argument, and then
you could give it precedence equivalent to delete and typeof. But
that would make a statement like
yield x - 1;
utterly confusing.
Yes; I pointed that out earlier in this thread:
"But then almost any algebraic or logical expression computing the
value to yield would need parentheses, and people would make mistakes
such as yield a + b where they meant yield(a + b) -- as in Python --
but got yield(a) + b."
But this objection applies to yield expressions in larger expressions
too.
Set aside for a moment the argument of *which* form of parenthesis
for a moment, and assume (yield E) wins for now. Could we redefine
yield so that it has two forms, a statement form and an expression
form? The statement form would be
yield E;
where E is optional. And the expression form would be
yield E
where E is required, and yield has precedence equivalent to delete
and typeof. Is that possible? Doing so would render any argument
about parenthesis moot, since they'd rarely be required, right?
Not clear. Using yield in a larger expression may nevertheless want to
yield an expression with precedence lower than unary (delete, !, etc.)
precedence. ES3 grammar:
UnaryExpression :
PostfixExpression
delete UnaryExpression
void UnaryExpression
typeof UnaryExpression
++ UnaryExpression
-- UnaryExpression
+ UnaryExpression
- UnaryExpression
~ UnaryExpression
! UnaryExpression
Since yield has some some similarity to return I'm still in favor of
what Python did: low precedence, mandatory parenthesization of the
whole yield expression in any non-statement context. JS1.7 tried to
relax this, but it's not worth it as your experience says.
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss