Mark S. Miller wrote:
On Tue, Jan 29, 2013 at 10:52 AM, Herby Vojčík <he...@mailbox.sk
<mailto:he...@mailbox.sk>> wrote:



    Brandon Benvie wrote:

        Responding in this thread since it's a more appropriate place.

        1.) It complicates the object model, in that it adds a new internal
        method to objects, but it also clarifies it. It falls under the same
        category as [[GetP]] and [[SetP]]: they complicate the object
        model, but
        they also clarify it and they are only observable to Proxies.
        All three
        are only observable to Proxies. Proxies are the thing that
        ultimately
        complicates the object model and these are fallout from it, but
        most of
        us agree that Proxies are worth it.


    Again, why add something that is "only observable to Proxies"? It is
    an exception, and it bring much more complication than straight
    rule. Such an exception is future-unfriendly.

    And I do not agree that it clarifies the object model. On the
    contrary. It makes it inconsistent.

       var quux = foo.bar;
       quux.call(foo, baz);

    was always equivalent of foo.bar(baz). Now, it is not.

    [[CallProperty]] is bad because it is alternative to [[Get]], in
    certain situations. What is the problem with, instead, doing it
    (imo) more properly, by reifying [[ChooseThis]](receiver, property)
    or something similar?


Hi Herby,

Perhaps I missed it, but could you expand on the [[ChooseThis]] idea? Or
provide a link to an earlier discussion if it's already adequately
covered? Thanks.

I replied it in another thread, but it was only on post, and it is included here as well (I just called in [[OopBind]] but it was more or less just [[ChooseThis]]):

[snip]

             ... and complicates object model. My main problem with
             [[CallProperty]] is the discrepancy between [[Get]] (used in
             [[Get]]+[[Call]]) and [[CallProperty]] (my assumption that by
             [[CallProperty]] you mean operation that replaces
        [[Get]]+[[Call]]).

             I'd solve it otherwise. Let's say that foo.bar(baz) is split to
             _three_ operations: [[Get]]+[[OopBind]]+[[Call]], where
        [[OopBind]]
             resolves this. Then, proxies should only be able to trap
        [[OopBind]]
             (but it will still be the same combination, involving trappable
             [[Get]] at the beginning and ending with (direct) [[Call]]).

[snip]

It is basically the idea that OOP call is three-part:
  [[Get]] (trappable)
  [[ChooseThis]] (by default choosing the base of Ref; trappable)
[[Call]] (in this context (receiver being proxy) untrappable; if a function itself is proxy, it's already someone else's problem)

.apply and .call would do the last two.

Herby
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to