<div dir="ltr">On Wed, Sep 11, 2013 at 4:44 AM, Brendan Eich <span dir="ltr"><<a href="mailto:brendan@mozilla.com" target="_blank">brendan@mozilla.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Except <a href="http://ariya.ofilabs.com/2011/08/hall-of-api-shame-boolean-trap.html" target="_blank">http://ariya.ofilabs.com/2011/<u></u>08/hall-of-api-shame-boolean-<u></u>trap.html</a>.<span class="HOEnZb"><font color="#888888"><br>
</font></span></blockquote><div><br></div><div>So one thing we could potentially do is to say that a proxy trapping [[Invoke]] either always returns  [invokeSuccess, result] and doesn't need the boolean argument - or it's just never conditional: if you trap [[Invoke]], you have to serve all method calls, and Proxy.[[Invoke]] would just return result. Given that proxies users would most likely not be used for these corner cases in the majority of cases, and quite deliberately so in the others, this seems fine to me.<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
<br>
/be</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
Till Schneidereit wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
    I'm beginning to like a conditional option on [[Invoke]].<br>
<br>
    Consider: [[Invoke]](P, ArgumentsList, Receiver, conditional=false)<br>
<br>
    If conditional is false, it works just like the current [[Invoke]]<br>
    spec.<br>
<br>
    If conditional is true and the [[Get]] value is not callable (this<br>
    includes undefined for a missing property) result is: [false,<br>
    [[Get]] result].<br>
    if conditional is true and the [[Get]] value is callable, result<br>
    is [true, value returned from [[Call]]<br>
<br>
    The conditional form would only be used  in odd cases like the<br>
    toJSON call.<br>
<br>
    ES code can accomplish the same thing via Reflect.invoke with true<br>
    as the 4th argument.<br>
<br>
I like it. This gets around the issue of distinguishing a return value of `undefined` from "no callable property with that name found" and would be easy to implement for proxies, too.<br>
</blockquote>
</div></div></blockquote></div><br></div></div>