On Wednesday, October 25, 2017 at 12:55:36 AM UTC-7, Toon Verwaest wrote:
>
> As Ben stated, --disable-old-api-accessors makes them behave the same; but 
> it indeed makes SetAccessor work like SetNativeDataProperty.
>
> The reason is that SetAccessor creates a pseudo-data-property that's 
> backed by accessors: Object.getOwnPropertyDescriptor(o, "p") will return 
> something that looks like a data property, not like an accessor. Data 
> properties are supposed to behave differently when on the prototype chain 
> than accessors. If there's a getter, we should call into it. If there's a 
> setter, however, we shouldn't call it. We should only check whether data 
> properties on the prototype chain are read-only, and thrown an exception if 
> they are. That's how data properties work.
>
> If you want something similar to the old-style SetAccessor behavior, you 
> should instead use SetAccessorProperty. That creates an actual 
> getter/setter pair. That setter will be called through the prototype chain 
> as well, just like other accessors in JS.
>
>
Thank you :)  After updating to SetAccessorProperty and setting ReadOnly as 
appropriate I get [getter] or [getter/setter] notations on them which is 
what I would expect (rather than calling them with non-instance This()s )
 

> The old behavior for SetAccessor is a v8-only invention that looks like a 
> data property but behaves like an accessor; which not only adds unnecessary 
> complexity, but is actually impossible to implement correctly in certain 
> cases.
>
> HTH,
> Toon
>
> On Tue, Oct 24, 2017 at 5:49 PM J Decker <d3c...@gmail.com <javascript:>> 
> wrote:
>
>>
>>
>> On Tuesday, October 24, 2017 at 7:38:44 AM UTC-7, Ben Noordhuis wrote:
>>
>>> On Tue, Oct 24, 2017 at 3:32 PM, J Decker <d3c...@gmail.com> wrote: 
>>> > 
>>> > On Tuesday, October 24, 2017 at 3:40:31 AM UTC-7, Ben Noordhuis wrote: 
>>> >> 
>>> >> On Tue, Oct 24, 2017 at 5:53 AM, J Decker <d3c...@gmail.com> wrote: 
>>> >> > 
>>> >> > On Thursday, August 7, 2014 at 3:52:53 PM UTC-7, Ben Noordhuis 
>>> wrote: 
>>> >> >> 
>>> >> >> On Fri, Aug 8, 2014 at 12:10 AM, Flying Jester <
>>> foolki...@gmail.com> 
>>> >> >> wrote: 
>>> >> >> > What precisely is the difference between using SetAccessor and 
>>> >> >> > SetNativeDataProperty? 
>>> >> >> 
>>> >> >> Nothing, as far as I know.  The order of arguments is different 
>>> but 
>>> >> >> they have identical implementations. 
>>> >> > 
>>> >> > They are not exactly the same...  I've been using 
>>> SetNativeDataProperty, 
>>> >> > which works for getters, but when i started to use it for a setter, 
>>> V8 
>>> >> > ended 
>>> >> > up setting a property on the object instead of calling the setter. 
>>> >> > Changing 
>>> >> > to SetAccessor allows the setter to be called correctly. 
>>> >> > 
>>> >> > And while I realize this is a very old thread; it's about the only 
>>> one 
>>> >> > that 
>>> >> > shows up for 'SetNativeDataProperty vs SetAccessor' 
>>> >> > 
>>> >> > I can't find any other information that would indicate that 
>>> >> > setnativedataproperty shouldn't or doesn't work; other than my 
>>> code. 
>>> >> 
>>> >> Blast from the past! 
>>> >> 
>>> >> I believe what I wrote still holds (or holds again) if you start V8 
>>> >> with `--disable_old_api_accessors`.  It's currently off by default 
>>> but 
>>> >> that will likely change someday. 
>>> > 
>>> > 
>>> > That option makes SetAccessor setter not work.  It creates a property 
>>> on the 
>>> > object instead of calling the setter. 
>>> > 
>>> > psiTemplate2->PrototypeTemplate()->SetAccessor( String::NewFromUtf8( 
>>> > isolate, "text" ) 
>>> > , ControlObject::getControlText, ControlObject::setControlText ); 
>>> > 
>>> > So that's discouraging.... 
>>>
>>> With `--disable_old_api_accessors` they are quite literally the same 
>>> implementation.  Something else must be going on.  Out-of-date V8 
>>> version? 
>>>
>>
>> M:\javascript\vfs\native>node
>> > process.version
>> 'v8.4.0'
>> > process.versions
>> { http_parser: '2.7.0',
>>   node: '8.4.0',
>>   v8: '6.0.286.52',
>>   uv: '1.13.1',
>>   zlib: '1.2.11',
>>   ares: '1.10.1-DEV',
>>   modules: '57',
>>   nghttp2: '1.22.0',
>>   openssl: '1.0.2l',
>>   icu: '59.1',
>>   unicode: '9.0',
>>   cldr: '31.0.1',
>>   tz: '2017b' } 
>>
>> I doubt it.  It's not absolute bleeding edge, but it's pretty new.
>>
>> I was going to include the whole thing I'm trying to test, but expect 
>> that to fail so here's a super simple test
>>
>> https://github.com/d3x0r/test-accessor
>>
>> It sets a SetAccessor called 'text' and a SetNativeDataProperty called 
>> 'native'
>>
>> to build
>> npm install .  
>>
>> test1 : ( only setter called is SetAccessor settter )
>> npm test
>>
>> (sample output) 
>> > node test.js
>>
>> plugin.cc: getter called... default value
>> Default: default value
>> plugin.cc: setter called... with newText
>> plugin.cc: getter called... newText
>> Default: [] newText
>> plugin.cc: getter called... newText
>> Default: newText
>> Default: [ 'native' ] nativeText
>>
>>
>> test2 : (passes --disable-old-api-accessors  which makes neither setter 
>> get called )
>> npm run test2
>>
>> (sample output)
>> > node --disable-old-api-accessors test.js
>>
>> plugin.cc: getter called... default value
>> Default: default value
>> Default: [ 'text' ] newText
>> plugin.cc: getter called... default value
>> Default: default value
>> Default: [ 'text', 'native' ] nativeText
>>
>>
>>
>>
>>
>> --------- what I would have sent ---------
>>
>> This is a node plugin - https://github.com/d3x0r/sack.vfs the new 
>> features I'm extending it with I can only confirm work under Windows.
>>
>>
>> https://github.com/d3x0r/sack.vfs/blob/master/src/gui/sack_psi_module.cc#L415
>>   
>> configures accessor on prototype here
>>
>> Which is tested with this line... 
>> https://github.com/d3x0r/sack.vfs/blob/master/tests/sack_test4.js#L28  
>> which should change the text in the resulting gui.
>>
>>
>>
>> -- 
>> -- 
>> v8-users mailing list
>> v8-u...@googlegroups.com <javascript:>
>> 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 v8-users+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
> -- 
>
> Toon Verwaest |  Software Engineer, V8 |  Google Germany GmbH |  Erika-Mann 
> Str. 33, 80636 München 
>
> Registergericht und -nummer: Hamburg, HRB 86891 | Sitz der Gesellschaft: 
> Hamburg | Geschäftsführer: Paul Manicle, Halimah DeLaine Prado
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
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 v8-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to