Yes, the first time the property is accessed, it gets the correct native 
function.  In my accessor before I return, I have:

    global->SetAccessor(context,property,0); 
    global->CreateDataProperty(context,property,obj);

Then the property becomes undefined the second time on.

On Saturday, October 31, 2015 at 10:04:24 AM UTC-7, Alex Kodat wrote:
>
> CreateDataProperty or DefineOwnProperty should work. Of course, you have 
> to make sure that the first time the function is accessed via the accessor 
> when you do your override, you have to return the function from the 
> accessor. But I assume you're doing that?
>
> On Friday, October 30, 2015 at 3:03:27 PM UTC-7, Jane Chen wrote:
>>
>> Is there anyway to use something like CreateDataProperty to override the 
>> accessor so that the actual function is associated with the property, 
>> albeit lazily created?
>>
>> I tried to use CreateDataProperty in place of ForceSet, since ForceSet is 
>> deprecated, but that didn't do it, and my property becomes undefined.
>>
>> On Friday, October 30, 2015 at 2:12:12 AM UTC-7, Jakob Kummerow wrote:
>>>
>>> Well, the profile tells you which function was executed. It doesn't know 
>>> or care what name you used to refer to this function -- it can't, as it's a 
>>> sampling profiler. Pure-JS example:
>>>
>>> function f() { /* long-running stuff */ }
>>> var g = f;
>>> g();  // Shows up as "f" in the profile.
>>>
>>> In your example, the function is a C++ object, so it doesn't even have a 
>>> name, so V8 tries to infer a name that it hopes is meaningful to a human 
>>> reader. The point is that for a single function, it can only infer a single 
>>> name.
>>>
>>> I think this is working as intended.
>>>
>>> On Thu, Oct 29, 2015 at 11:57 PM, Jane Chen <jxch...@gmail.com> wrote:
>>>
>>>> A test case to demonstrate the issue can be found at:
>>>>
>>>> https://code.google.com/p/v8/issues/detail?id=4527
>>>>
>>>>
>>>> On Thursday, October 29, 2015 at 3:46:21 PM UTC-7, Jane Chen wrote:
>>>>>
>>>>> Testing profiling against v8 4.6.88.
>>>>>
>>>>> I have functions that are exposed through accessor callbacks.  If a 
>>>>> native function is set for multiple accessor properties, the last 
>>>>> property 
>>>>> shows up as the function name in the CpuProfileNode, regardless what name 
>>>>> you set to the function returned by the accessor function.  For example:
>>>>>
>>>>> global->SetAccessor(
>>>>>     v8::String::NewFromUtf8(isolate, "print", 
>>>>> v8::NewStringType::kNormal)
>>>>>           .ToLocalChecked(),
>>>>>     getFunction);
>>>>> global->SetAccessor(
>>>>>     v8::String::NewFromUtf8(isolate, "read", 
>>>>> v8::NewStringType::kNormal)
>>>>>           .ToLocalChecked(),
>>>>>     getFunction);
>>>>>
>>>>> Now "get read" is the function name in CpuProfileNode although print 
>>>>> is called.
>>>>>
>>>>> Test script: 
>>>>>  
>>>>> function isPrime(num) { 
>>>>>   for (var count = 2; count < num; count++) 
>>>>>     if (num % count == 0) return false; 
>>>>>   return true; 
>>>>> }; 
>>>>>  
>>>>> var total = 0; 
>>>>> for (var i = 2; i < 100000; i++) { 
>>>>>   if (isPrime(i)) { 
>>>>>     print(i); 
>>>>>     total++ 
>>>>>   } 
>>>>> }; 
>>>>> total; 
>>>>>  
>>>>> TotalHitCount:2233
>>>>>
>>>>> FunctionName:(root)
>>>>> LineNumber:0
>>>>> ColumnNumber:0
>>>>> HitCount:0
>>>>>     FunctionName:(program)
>>>>>     LineNumber:0
>>>>>     ColumnNumber:0
>>>>>     HitCount:7
>>>>>     FunctionName:
>>>>>     LineNumber:0
>>>>>     ColumnNumber:0
>>>>>     HitCount:13
>>>>>         FunctionName:isPrime
>>>>>         LineNumber:1
>>>>>         ColumnNumber:17
>>>>>         HitCount:8
>>>>>     FunctionName:
>>>>>     LineNumber:1
>>>>>     ColumnNumber:1
>>>>>     HitCount:2196
>>>>>         FunctionName:get read
>>>>>         LineNumber:0
>>>>>         ColumnNumber:0
>>>>>         HitCount:2
>>>>>     FunctionName:(garbage collector)
>>>>>     LineNumber:0
>>>>>     ColumnNumber:0
>>>>>     HitCount:7
>>>>>
>>>>>
>>>>> Given that an accessor callback takes a property name, it should allow 
>>>>> one native function to handle multiple properties.  Is this a bug, or am 
>>>>> I 
>>>>> doing something wrong?  
>>>>>
>>>> -- 
>>>> -- 
>>>> v8-users mailing list
>>>> v8-u...@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+u...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>

-- 
-- 
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