On Thu, Aug 20, 2020 at 6:18 PM Jann G <[email protected]> wrote:
> Thanks for the replies! This all makes sense. Where do interceptors come > into the picture? Interceptors can only be set via the API, and are "catch-all accessors", a bit like a JS Proxy's traps. > Can you only add interceptors to JS_SPECIAL_API_OBJECT_TYPE > <https://source.chromium.org/chromium/chromium/src/+/master:v8/src/objects/instance-type.h;drc=1562cab3f1eda927938f8f4a5a91991fefde66d3;l=134> > ? > Yes, JS_SPECIAL_API_OBJECT_TYPE has been introduced to let V8 quickly determine "do I need to check for interceptors (and a few other special cases) on this object, or not?". So the implication is kind of the other way round: if you configure interceptors, the object will have ...SPECIAL... type. On Friday, July 31, 2020 at 5:49:06 AM UTC-4 Toon Verwaest wrote: > >> AccessorInfo is a "native data property". It behaves like an accessor >> from the embedder point-of-view, but looks like a data property from >> javascript (getOwnPropertyDescriptor will return value: ... rather than >> get(), set(v)). >> >> Even though regular objects can have them too in V8, the embedder can >> only attach them to custom receivers. If you see something else, this might >> be because you're looking at This() rather than Holder() when loading a >> property through the prototype chain. This() will be the object on which >> the lookup was started, while Holder() is the custom receiver object on >> which the accessor is installed. >> >> hth >> >> On Mon, Jul 20, 2020 at 7:10 PM Jakob Kummerow <[email protected]> >> wrote: >> >>> They can be defined on normal objects. The canonical example is >>> Array.prototype.length being implemented as an AccessorInfo. >>> >>> >>> On Mon, Jul 20, 2020 at 4:39 PM Jann G <[email protected]> wrote: >>> >>>> Can an AccessorInfo be defined on normal objects or only custom >>>> receivers? There's been some confusion in bug reports like: >>>> https://bugs.chromium.org/p/chromium/issues/detail?id=1082355 >>>> <https://bugs.chromium.org/p/chromium/issues/detail?id=1082355&q=%22PropertyCallbackArguments%3A%3ACallAccessorGetter%22&can=1> >>>> which >>>> reaches PropertyCallbackArguments::CallAccessorGetter. >>>> >>>> >>>> On Monday, July 20, 2020 at 1:50:23 PM UTC+1, Jakob Kummerow wrote: >>>>> >>>>> AFAIK AccessorInfo can only be defined via the C++ API, i.e. by the >>>>> embedder (or by V8 itself). AccessorPair is what you get when you define >>>>> accessors via JavaScript. >>>>> >>>>> >>>>> On Mon, Jul 20, 2020 at 1:03 PM Jann Godspeed <[email protected]> >>>>> wrote: >>>>> >>>>>> I'm having trouble understanding how AccessInfo works. Can they only >>>>>> be defined on special objects? >>>>>> >>>>>> >>>>>> To define an AccessorPair on an object I would do something like >>>>>> >>>>>> let o = {} >>>>>> o.__defineGetter__("test", function() { }); >>>>>> >>>>>> let o = {}; >>>>>> ??? >>>>>> >>>>>> -- >>>>>> >>>>> -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/CAKSzg3RpUo%3D85_QRqUy%3DNJ%2BXNdNSHtaNE2i7CPDEv6SYR9RiGA%40mail.gmail.com.
