Never mind. You were right, I had it on my prototype template. I had moved it at one point but at some point I must have undid the change without realizing it, because I knew where it belonged.
Thank you again. On Monday, October 31, 2016 at 3:16:50 AM UTC-7, Zac Hansen wrote: > > Thank you for your help. I mostly understand what you're saying, but I'm > not quite clear on what I'm doing that's making holder != this. Are there > any common/semi-common things you can do while wrapping a c++ object in a > JS Object's internalfield that causes this to happen? > > When I say new MyType(), that calls into a FunctionTemplate that takes > info.This() and puts a C++ object in its internal field. The "new > MyType()" FunctionTemplate can have a bunch of stuff on it's > Instance/Prototype templates including accessors, data members, etc, though > I thought I filtered most of that out in my test cases. Is anything I > said or maybe something I'm probably doing and didn't say going to cause > the holder != this? > > Thank you so much. > > --Zac > > On Monday, October 31, 2016 at 1:39:29 AM UTC-7, Toon Verwaest wrote: >> >> It just follows JS property access semantics. And that's complicated. >> >> If you're trying to set a property, but it doesn't exist on the receiver, >> we need check whether the property exists on the prototype chain. If it >> does and has a setter, we need to call the setter. If it does and is >> read-only, we need to throw. If it exists and isn't either of those, that >> would mask a property up the prototype chain. Hence if we see an >> interceptor that's not on the receiver, we need to check whether it has the >> property. If it does, that would mask a non-writable/settable property >> further up the prototype chain. >> >> So we basically get the attributes to see whether it exists and whether >> it's writable. That can either be returned through the query callback, or >> through the getter. >> >> Now for your specific problem; it seems like your simple example must >> mismatch the actual code you're having. If you don't see your setter being >> called at all, that just means that you put the setter on Point.prototype, >> not on instances of Point. Setters for "native data properties"; which >> includes interceptors; are only invoked on the receiver directly. Only real >> JS accessors are called through the prototype chain. This again follows the >> spec. >> >> On Mon, Oct 31, 2016 at 2:10 AM Zac Hansen <[email protected]> wrote: >> >>> Stack traces for the working and non-working versions: >>> >>> https://gist.github.com/xaxxon/5eabcc079a3103abd0f7b3239b2cf3b2 >>> >>> >>> my v8 source is at commit: >>> >>> a05f85a3db33860f7f9651d904fd4193ee757848 >>> >>> On Saturday, October 29, 2016 at 3:33:14 AM UTC-7, Zac Hansen wrote: >>> >>>> I run the following javascript: >>>> >>>> var p = new Point(); p.foo = 5; >>>> >>>> where Point creates an object from an ObjectTemplate that has >>>> had SetHandler called on it. However, this calls my getter callback. >>>> Everything I've tried from javascript calls my getter callback. >>>> >>>> object_template->SetHandler(v8::NamedPropertyHandlerConfiguration( >>>> // Getter >>>> [](v8::Local<v8::Name> property_name, >>>> v8::PropertyCallbackInfo<v8::Value> const & info){ >>>> printf("IN GETTER CALLBACK111 %s\n", >>>> *v8::String::Utf8Value(property_name)); >>>> }, >>>> // setter >>>> [](v8::Local<v8::Name> property_name, >>>> v8::Local<v8::Value> new_property_value, >>>> v8::PropertyCallbackInfo<v8::Value> const & >>>> info){ >>>> printf("IN SETTER CALLBACK222 %s\n", >>>> *v8::String::Utf8Value(property_name)); >>>> }, >>>> nullptr, // query >>>> nullptr, // deleter >>>> nullptr, // enumerator >>>> v8::External::New(this->isolate, (void *)data), >>>> v8::PropertyHandlerFlags::kNonMasking)); // <== >>>> Tried with and without this >>>> }; >>>> >>>> >>>> and prints out: IN GETTER CALLBACK111 foo >>>> >>>> I originally tried with the older API for string-only property names >>>> and had the same results. >>>> >>>> #define V8_MAJOR_VERSION 5 >>>> #define V8_MINOR_VERSION 6 >>>> #define V8_BUILD_NUMBER 0 >>>> #define V8_PATCH_LEVEL 0 >>>> >>>> on os x 10.11 clang 3.9 >>>> >>> -- >>> -- >>> v8-users mailing list >>> [email protected] >>> http://groups.google.com/group/v8-users >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "v8-users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
