<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Jun 12, 2014 at 8:19 AM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><br>
On Jun 12, 2014, at 5:26 AM, Till Schneidereit wrote:<br>
<br>
> 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>Fortunately there aren't very many of those. I think it is only Date and RegExp that have this issue among the ES6 built-ins</blockquote><div><br></div><div>WeakMap, Map, Set, others?</div><div><br></div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
><br>
> 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>that breaks if you move such methods across Realms.<br>
<div class=""><br>
><br>
> 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.<br>

<br>
</div>Yes, it would still throw for subclasses.<br>
<br>
I think the pattern we should follow for such built-in toString methods is that if a branding check of this sort is performed, the fall back should be to perform the built-in Object.prototype.toString behavior rather than throwing.<br>

<br>
Unless somebody sees issues with this fix, I'll incorporate it into the spec. for Date and RegExp.<br></blockquote><div><br></div><div>The real problem includes ES6 classes as well. Whatever fix we choose, it should apply there as well -- not that I have a concrete proposal. This one's a real puzzler.</div>
<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Of course, even with this fix there is no guarantee that invoking toString on an object won't throw.  Debugging tool that expect to use toString need to take that into account and provide their own fallbacks.<br>
<span class="HOEnZb"><font color="#888888"><br>
Allen<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<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>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>  Cheers,<br>  --MarkM
</div></div>