Err, s/ArgumentSignature/AccessorSignature/ On Thu, Apr 20, 2017 at 1:24 PM, Kenton Varda <[email protected]> wrote:
> Hi Toon, > > Now I have a new problem: When I attach an ArgumentSignature to my > property, it fails when accessing the property on the global object (both > with and without "this."). Signatures on methods seem to work fine, though, > even when calling on the global object. Is there a special-case that needs > to be copied over? > > -Kenton > > On Thu, Apr 20, 2017 at 12:57 PM, Kenton Varda <[email protected]> > wrote: > >> Oh I see, somehow I missed your CL link. >> >> Thanks! :) >> >> -Kenton >> >> On Thu, Apr 20, 2017 at 12:09 PM, Toon Verwaest <[email protected]> >> wrote: >> >>> That's exactly why I'm fixing the problem :-) The fix was temporarily >>> reverted since there are tests in Blink for which the expectations change, >>> and that takes a while to sync; but you can try with the CL I linked above. >>> >>> On Thu, Apr 20, 2017 at 6:40 PM 'Kenton Varda' via v8-users < >>> [email protected]> wrote: >>> >>>> Thanks, but what if I don't control the scripts and can't force them to >>>> prefix global property access with "this."? >>>> >>>> -Kenton >>>> >>>> On Thu, Apr 20, 2017 at 1:39 AM, Toon Verwaest <[email protected]> >>>> wrote: >>>> >>>>> The problem is that since you're accessing the global property via >>>>> 'contextual access', we're passing out the global object rather than the >>>>> global proxy (see https://developer.mozilla.org/ >>>>> en-US/docs/Mozilla/Projects/SpiderMonkey/Split_object for >>>>> background). If you replace >>>>> >>>>> v8::Local<v8::String> source = >>>>> v8::String::NewFromUtf8(isolate, "func(); prop;", >>>>> v8::NewStringType::kNormal). >>>>> >>>>> with >>>>> >>>>> v8::Local<v8::String> source = >>>>> v8::String::NewFromUtf8(isolate, "func(); this.prop;", >>>>> v8::NewStringType::kNormal). >>>>> >>>>> it works. Changing it so it works as expected: >>>>> >>>>> https://chromium-review.googlesource.com/c/483199/ >>>>> >>>>> cheers, >>>>> Toon >>>>> >>>>> On Thu, Apr 20, 2017 at 3:14 AM kenton via v8-users < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> I'm trying to understand what I'm doing wrong here. >>>>>> >>>>>> I have created an ObjectTemplate for the global object which contains >>>>>> a method, a property, and an internal field. After creating the context, >>>>>> I >>>>>> use Global()->SetAlignedPointerInInternalField() to set a pointer on >>>>>> the object, then I call the function and read the property. >>>>>> >>>>>> In the function callback, I'm able to read the pointer from the >>>>>> internal field as expected. >>>>>> >>>>>> However, in the property callback, GetAlignedPointerInInternalField() >>>>>> crashes! >>>>>> >>>>>> InternalFieldCount(), though, still returns the actual number of >>>>>> internal fields I allocated. So it seems like it's *supposed* to be the >>>>>> right object. >>>>>> >>>>>> OTOH, GetIdentityHash() returns something that doesn't match >>>>>> context.Global()->GetIdentityHash(), whereas in the function >>>>>> callback these do match. >>>>>> >>>>>> I'm using v8 at commit 49d32849b3e67b1fa05f5f7aeea57dd83634adb9 >>>>>> (April 14). >>>>>> >>>>>> Sample code and output below. >>>>>> >>>>>> Surely people have created properties on the global object before, so >>>>>> I must be doing it wrong. What's the right way to do it? >>>>>> >>>>>> Thanks, >>>>>> -Kenton >>>>>> >>>>>> ================================== >>>>>> CODE >>>>>> ================================== >>>>>> >>>>>> #include <stdio.h> >>>>>> #include <stdlib.h> >>>>>> #include <string.h> >>>>>> >>>>>> #include <libplatform/libplatform.h> >>>>>> #include <v8.h> >>>>>> >>>>>> void funcCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { >>>>>> printf("in func()\n"); >>>>>> printf(" this identity = %x\n", info.This()->GetIdentityHash()); >>>>>> printf(" holder identity = %x\n", info.Holder()->GetIdentityHash >>>>>> ()); >>>>>> printf(" InternalFieldCount = %d\n", info.This()->InternalFieldCoun >>>>>> t()); >>>>>> >>>>>> // This works fine. >>>>>> printf(" GetAlignedPointerFromInternalField(0) = %s\n", >>>>>> (const char*)info.This()->GetAlignedP >>>>>> ointerFromInternalField(0)); >>>>>> } >>>>>> >>>>>> void propCallback(v8::Local<v8::Name>, const >>>>>> v8::PropertyCallbackInfo<v8::Value>& info) { >>>>>> printf("getting prop\n"); >>>>>> printf(" this identity = %x\n", info.This()->GetIdentityHash()); >>>>>> printf(" holder identity = %x\n", info.Holder()->GetIdentityHash >>>>>> ()); >>>>>> printf(" InternalFieldCount = %d\n", info.This()->InternalFieldCoun >>>>>> t()); >>>>>> >>>>>> // THIS CRASHES >>>>>> printf(" GetAlignedPointerFromInternalField(0) = %s\n", >>>>>> (const char*)info.This()->GetAlignedP >>>>>> ointerFromInternalField(0)); >>>>>> } >>>>>> >>>>>> int main(int argc, char* argv[]) { >>>>>> // Initialize V8. >>>>>> v8::V8::SetFlagsFromCommandLine(&argc, argv, true); >>>>>> v8::V8::InitializeICUDefaultLocation(argv[0]); >>>>>> v8::V8::InitializeExternalStartupData(argv[0]); >>>>>> v8::Platform* platform = v8::platform::CreateDefaultPlatform(); >>>>>> v8::V8::InitializePlatform(platform); >>>>>> v8::V8::Initialize(); >>>>>> >>>>>> v8::Isolate::CreateParams create_params; >>>>>> create_params.array_buffer_allocator = >>>>>> v8::ArrayBuffer::Allocator::NewDefaultAllocator(); >>>>>> v8::Isolate* isolate = v8::Isolate::New(create_params); >>>>>> >>>>>> { >>>>>> v8::Isolate::Scope isolate_scope(isolate); >>>>>> v8::HandleScope handle_scope(isolate); >>>>>> >>>>>> // Create global ObjectTemplate. >>>>>> auto globalInstanceTmpl = v8::ObjectTemplate::New(isolate); >>>>>> globalInstanceTmpl->SetInternalFieldCount(123); >>>>>> globalInstanceTmpl->Set(isolate, "func", >>>>>> v8::FunctionTemplate::New(isolate, &funcCallback)); >>>>>> globalInstanceTmpl->SetAccessor( >>>>>> v8::String::NewFromUtf8(isolate, "prop", >>>>>> v8::NewStringType::kInternalized).ToLocalChecked(), >>>>>> &propCallback); >>>>>> >>>>>> v8::Local<v8::Context> context = v8::Context::New(isolate, >>>>>> nullptr, globalInstanceTmpl); >>>>>> >>>>>> // Set internal field pointer on global. >>>>>> alignas(long long) const char TEXT[] = "internal-field-value"; >>>>>> context->Global()->SetAlignedPointerInInternalField(0, >>>>>> (void*)TEXT); >>>>>> printf("global identity = %x\n", context->Global()->GetIdentity >>>>>> Hash()); >>>>>> >>>>>> // Call func() then read prop. >>>>>> v8::Context::Scope context_scope(context); >>>>>> v8::Local<v8::String> source = >>>>>> v8::String::NewFromUtf8(isolate, "func(); prop;", >>>>>> v8::NewStringType::kNormal).To >>>>>> LocalChecked(); >>>>>> v8::Local<v8::Script> script = v8::Script::Compile(context, >>>>>> source).ToLocalChecked(); >>>>>> (void)script->Run(context); >>>>>> } >>>>>> >>>>>> isolate->Dispose(); >>>>>> v8::V8::Dispose(); >>>>>> v8::V8::ShutdownPlatform(); >>>>>> delete platform; >>>>>> delete create_params.array_buffer_allocator; >>>>>> return 0; >>>>>> } >>>>>> >>>>>> ================================== >>>>>> OUTPUT >>>>>> ================================== >>>>>> >>>>>> global identity = 31be67ae >>>>>> in func() >>>>>> this identity = 31be67ae >>>>>> holder identity = 31be67ae >>>>>> InternalFieldCount = 123 >>>>>> GetAlignedPointerFromInternalField(0) = internal-field-value >>>>>> getting prop >>>>>> this identity = 56231851 >>>>>> holder identity = 56231851 >>>>>> InternalFieldCount = 123 >>>>>> >>>>>> # >>>>>> # Fatal error in v8::Object::GetAlignedPointerFromInternalField() >>>>>> # Not a Smi >>>>>> # >>>>>> >>>>>> Received signal 4 ILL_ILLOPN 7fac7e6bdde1 >>>>>> >>>>>> ==== C stack trace =============================== >>>>>> >>>>>> [0x7fac7e6bfe5e] >>>>>> [0x7fac7e6bfdb5] >>>>>> [0x7fac7baea0c0] >>>>>> [0x7fac7e6bdde1] >>>>>> [0x7fac7d10f38c] >>>>>> [0x7fac7d14f12f] >>>>>> [0x7fac7d11269e] >>>>>> [0x7fac7d133a8d] >>>>>> [0x000000401f23] >>>>>> [0x7fac7d9a2304] >>>>>> [0x7fac7da7095e] >>>>>> [0x7fac7da6f7c9] >>>>>> [0x7fac7d989d72] >>>>>> [0x7fac7d98ac53] >>>>>> [0x7fac7d995c91] >>>>>> [0x7fac7d995930] >>>>>> [0x35f10fd84264] >>>>>> [end of stack trace] >>>>>> Illegal instruction >>>>>> >>>>>> -- >>>>>> -- >>>>>> 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. >>>>>> >>>>> -- >>>>> >>>>> 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: Matthew Scott Sucherman, >>>>> Paul Terence Manicle >>>>> >>>> -- >>>>> -- >>>>> v8-users mailing list >>>>> [email protected] >>>>> http://groups.google.com/group/v8-users >>>>> --- >>>>> >>>> You received this message because you are subscribed to a topic in the >>>>> Google Groups "v8-users" group. >>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>>>> pic/v8-users/RET5b3KOa5E/unsubscribe. >>>>> To unsubscribe from this group and all its topics, 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. >>>> >>> -- >>> >>> 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: Matthew Scott Sucherman, Paul >>> Terence Manicle >>> >>> -- >>> -- >>> v8-users mailing list >>> [email protected] >>> http://groups.google.com/group/v8-users >>> --- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "v8-users" group. >>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>> pic/v8-users/RET5b3KOa5E/unsubscribe. >>> To unsubscribe from this group and all its topics, 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.
