<div dir="ltr">Mark: considering that explicitly invoking a builtin prototype method, expecting a throw, to test for the [[Call]] internal slot, was the branding approach the committee agreed to preserve when it reaffirmed Symbol.toStringTag, as an alternative to `Object#toString.call`, I think Claude's point ("<span style="font-size:13px">The expectation is not that `F.p.toString` will always return something useful; it is that, for any callable object, it will return a string and not throw, because it was so since the dawn of JS.") is the one that convinces me.</span><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">Shouldn't tests in existing code that rely on `Function#toString` not throwing to indicate that something is callable, or throwing to indicate that it is not, remain true for a function proxy?</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 27, 2015 at 7:52 AM, Mark S. Miller <span dir="ltr"><<a href="mailto:erights@google.com" target="_blank">erights@google.com</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">Notice that whatever we decide on the issue, functionProxy.toString() will work regardless, since you'd be getting the toString method itself through the membrane. functionProxy.toString will be a function proxy for the target.toString method. The invocation on the toString proxy with functionProxy as this will be translated by the membrane back into an invocation of target.toString with target as this.<div><br></div><div>The issue we're debating is only relevant on an edge case -- when explicitly invoking F.p.toString.call(functionProxy).</div><div><br></div><div><br></div></div><div class="gmail_extra"><div><div class="h5"><br><div class="gmail_quote">On Tue, Oct 27, 2015 at 10:04 AM, Claude Pache <span dir="ltr"><<a href="mailto:claude.pache@gmail.com" target="_blank">claude.pache@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><br>
> Le 27 oct. 2015 à 14:14, Boris Zbarsky <<a href="mailto:bzbarsky@mit.edu" target="_blank">bzbarsky@mit.edu</a>> a écrit :<br>
><br>
> On 10/27/15 4:35 AM, Claude Pache wrote:<br>
>> it is that, for any callable object, it will return a string and not throw, because it was so since the dawn of JS.<br>
><br>
> It's totally false for random "host objects" with a [[Call]] in ES5, per spec and in at least some implementations.  As you can tell in Firefox for example:<br>
><br>
>  Function.prototype.toString.call(document.createElement("object"))<br>
><br>
> (though it does not throw for document.all in Firefox, for interesting implementation reasons).<br>
><br>
>> That function will work (in the sense of: will return an answer; I'm not judging the quality of that answer) with anything reasonable fed to it (where "reasonable" excludes things like `(class { static toString() { throw "pwnd!" }})`).<br>
><br>
> Won't work with an HTMLObjectElement in at least some browsers.  How "reasonable" that is, who knows.<br>
><br>
> -Boris<br>
<br>
</span>You're right. But since `document.createElement("object")` does not inherit from `Function.prototype`, the code (`f.toString()`) accidentally works after all.<br>
<br>
(I've tried not to be too smart in my example by writing `f.toString()` instead of `Function.prototype.toString.call(f)`. Maybe I should have been even less smart by defining an instance method on `Function.prototype` instead of a static method on `Function`...)<br>
<span><font color="#888888"><br>
—Claude<br>
</font></span><div><div>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div>    Cheers,<br>    --MarkM</div>
</font></span></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" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>