<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>It was pointed out to me that I forgot to include the latest slides for async generator. I was referring to the link included earlier</div>
<div>in the thread. Sorry for the confusion.</div><div><br></div><div>Here is the link again.<br><br><a href="https://docs.google.com/a/netflix.com/file/d/0B4PVbLpUIdzoMDR5dWstRllXblU">https://docs.google.com/a/netflix.com/file/d/0B4PVbLpUIdzoMDR5dWstRllXblU</a><br>
<br>Dictated using voice recognition. Please forgive the typos.</div><div><br>On Jun 12, 2014, at 10:57 AM, "Mark S. Miller" <<a href="mailto:erights@google.com">erights@google.com</a>> wrote:<br><br></div>
<blockquote type="cite"><div><div dir="ltr">Wow, what a mess. Let's forget the builtins for a moment and focus on JS classes, both the old/current patterns for coding these manually, and the new ES6 class syntax. Consider:<div>
<br></div><div>class Point {</div>
<div>  constructor(x, y) {</div><div>    this.x = x;</div><div>    this.y = y;</div><div>  },</div><div>  getX() { return this.x; },</div><div>  getY() { return this.y; },</div><div>  toString() {</div><div>    return `<${this.getX()},${this.getY()}>`;</div>

<div>  }</div><div>}</div><div><br></div><div>or equivalently enough in ES5</div><div><br></div><div>function Point(x, y) {</div><div>  this.x = x;</div><div>  this.y = y;</div><div>}</div><div>Point.prototype = {</div><div>

  getX: function() { return this.x; },</div><div>  getY: function() { return this.y; },</div><div>  toString: function() {</div><div>    return '<' + this.getX() + ',' + this.getY() + '>';</div>

<div>  }</div><div>};</div><div><br></div><div>alert(Point.prototype) alerts "<undefined,undefined>". Ok, this specific example doesn't throw, but equally simple and plausible examples would.</div><div>

<br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 12, 2014 at 5:26 AM, Till Schneidereit <span dir="ltr"><<a href="mailto:till@tillschneidereit.net" target="_blank">till@tillschneidereit.net</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>While working on changing Date.prototype to be a plain object in SpiderMonkey, we realized that there's an issue: the way things are specced now, `alert(Date.prototype)` will throw, because `Date.prototype.toString` isn't generic. The same applies for all builtins with non-generic `toString` prototype functions.<br>


<br></div>To resolve this, I propose changing these `toString` to first check if the `this` value is %FooPrototype% (e.g., %DatePrototype% in the case at hand) and return the result of the equivalent of calling the original Object.prototype.toString.<br>


<br></div><div>I'm not sure if that is enough to cover subclasses of these builtins. Will calling `toString` on the prototype of `class MyDate extends Date{}` still throw? If so, that would at least not be a backwards-compatibility concern, but it's probably also not desirable.<span class="HOEnZb"><font color="#888888"><br>


<br><br>till<br></font></span></div></div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>    Cheers,<br>    --MarkM
</div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>es-discuss mailing list</span><br><span><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a></span><br>
<span><a href="https://mail.mozilla.org/listinfo/es-discuss">https://mail.mozilla.org/listinfo/es-discuss</a></span><br></div></blockquote></body></html>