On Nov 11, 2011, at 3:48 AM, François REMY wrote:

> I think you strongly underestimate the "distinction" problem. ... It's 
> completelty unclear to me. If there's no way to tell what the "return 
> statement" of the block is, there's no way to implement your proposal.

It's actually quite easy to implement Dmitry's proposal, because it's already 
specified by the ECMAScript semantics! All statements can produce completion 
values. You can test this yourself: take any statement, quote it as a string, 
and put it in eval, and you'll get a value (if it doesn't loop infinitely, exit 
the program, or throw an exception, of course).

As Andreas said, there's a subtler issue of whether there's a simple structure 
to value-producing substatements, and there's a few problematic cases, but 
there's already a plan to clean that up at

    http://wiki.ecmascript.org/doku.php?id=harmony:completion_reform

But that's mostly a secondary issue, to keep things more regular and to be more 
compatible with tail calls.

To answer your specific example:

>   let a = if (foo) {
>      print('a is foo');
>      foo;
>   } else {
>      // do some longer stuff
>   };
> 
> How do you know "foo" is an expression that should be assigned to "a" and 
> that "print('a...')" is not?

Because the then-branch of the if is a block, and the completion value of a 
block is specified in ECMAScript to be the last completion value produced by 
its body statements.

Dave

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to