Kevin Smith wrote:

>     function f(x=EXPR1, y=EXPR2) { BODY }
>     ===>
>     function f(x, y) {
>         if (x === void 0) x = EXPR1;
>         if (y === void 0) y = EXPR2;
>         BODY
>     }

    In case it isn't clear what I'm saying here, I think the same
    desugaring should hold for generators. Exceptions would then be
    deferred to "loc 2" in Allen's example.


I'm not so sure - the desugaring above would mean that default expressions would have visibility across curly-brace boundaries, which I find to be quite surprising. That's what makes "var" so weird, after all. The conceptual link between curlies and visibility is inherent in C-like languages.

But as I pointed out, we have problems already in JS:

  function f(x) {var x; ...}

the var x restates the formal parameter. It does not shadow it.

IMO the expectation will be that default parameter values are evaluated when the generator function is called.

Python "binds" then, but evaluates the expressions at generation definition evaluation time.

Expectations may vary, and I still concur with Jason that the simplest and thinnest "skin" is best here.

Any exceptions that occur in the generator body prior to the first yield will be expected at the first call to next().

That would be loc 2, though -- seems to go against what you wrote earlier.

It also is not how generators work in Python or JS1.7+:

Python 2.6.6 (r266:84292, May 28 2011, 19:08:00)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def g():
...   raise BaseException('foo')
...   yield
...
>>> i = g()
>>> i.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in g
BaseException: foo

js> function g(){throw 42; yield}
js> i = g()
({})
js> i.next()
uncaught exception: 42

The exception comes after the first .next() that starts from the implicit yield point.

The design doesn't work if there's no implicit yield first. The rest of what's shown above follows from that.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to