Thanks for that thought Alex! Drafting a reply to you led me to the answer, which is obvious in hindsight. Yes, I could just get "lamingtons" in this case, but that wouldn't help me if it was a non-trivial accessor. In javascript I would be able to call "instance.numberOfLamingtons". In this case, I can simply call "Get" with value "numberOfLamingtons". Yes, obvious in hindsight. The code ends up looking something like the below. Thanks again, thoroughly appreciate the help. Ben
// Call an accessor function on the instance. v8::Local<v8::Value> lamingtons; CHECK(instance->Get(context, ToV8Value(isolate, "numberOfLamingtons")).ToLocal(&lamingtons)); std::cout << ConvertTo<double>(*isolate, lamingtons->ToNumber(context).ToLocalChecked()) << std::endl; On Friday, 27 November 2020 at 23:34:26 UTC+10:30 alex...@gmail.com wrote: > You wouldn't call it any more than you "call" it in JavaScript. You just > get the value via the Object Get function: > Local<Value> pastries = object->Get(context, String::NewFromUtf8( isolate, > "lamingtons").ToLocalChecked()); > > On Friday, November 27, 2020 at 4:59:00 AM UTC-5 boi...@gmail.com wrote: > >> There's one thing I'm struggling with here. Given the simple class >> definition below, using the V8 C++ API I can call the ordinary function >> "lamingtonsIsUndefined", but how would I call the accessor "get >> numberOfLamingtons()"? >> Many thanks in advance, >> Ben >> >> >> export class DemonstrationClass { >> constructor(lamingtons) { >> this.lamingtons = lamingtons >> } >> get numberOfLamingtons() { >> return this.lamingtons >> } >> lamingtonsIsUndefined(){ >> return this.lamingtons === undefined >> } >> } >> >> >> >> >> On Sunday, 22 November 2020 at 22:14:55 UTC+10:30 Ben Ernst wrote: >> >>> Thanks for the advice, that got me back on track. The failure mentioned >>> in my original post only occurs when there's nothing at all exported from >>> the module. I speculate the namespace object gets garbage collected in that >>> situation. When I tested with actual valid modules, everything works fine. >>> Thanks again, >>> Ben >>> >>> >>> On Tuesday, 17 November 2020 at 21:21:25 UTC+10:30 Ben Ernst wrote: >>> >>>> Thank you for the advice Camillo, the test you referred me to is very >>>> helpful. I will prepare a good code sample and come back to this >>>> conversation. >>>> >>>> Regards, >>>> Ben >>>> >>>> >>>> On Tue, 17 Nov 2020 at 19:54, Camillo Bruni <cbr...@chromium.org> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> The ModuleNamespace >>>>> <https://source.chromium.org/chromium/chromium/src/+/master:v8/include/v8.h;drc=5d658083d506ff1bf14abdd2221d94cbcf4fae96;bpv=1;bpt=1;l=1591?q=v8::Module> >>>>> >>>>> object is the proper choice, you can have a look at the existing tests >>>>> <https://source.chromium.org/chromium/chromium/src/+/master:v8/test/cctest/test-api.cc;l=26235;drc=5d658083d506ff1bf14abdd2221d94cbcf4fae96;bpv=1;bpt=1?q=v8::Module> >>>>> . >>>>> For future reference, you will usually find (a bit hidden and obscure, >>>>> I agree) existing tests in V8's test-api.cc >>>>> <https://source.chromium.org/chromium/chromium/src/+/master:v8/test/cctest/test-api.cc> >>>>> . >>>>> >>>>> Could you provide some more example code for the error you get >>>>> with persistent handles? >>>>> >>>>> cheers, >>>>> Camillo >>>>> >>>>> On Tue, 17 Nov 2020 at 01:11, Ben Ernst <boi...@gmail.com> wrote: >>>>> >>>>>> I am migrating my V8 code from using "plain scripts" to using "ES6 >>>>>> Modules". There are a few concepts that I am struggling with. >>>>>> >>>>>> First, how might I retrieve a class definition defined in a module? >>>>>> Previously I would have used the "global" object on the "context" (i.e. >>>>>> context->Global()), and found the class definition there. I can't find a >>>>>> good example on how to do that in a module. I am experimenting with >>>>>> Module::GetModuleNamespace(), but I'm not sure that I'm on the right >>>>>> track. >>>>>> >>>>>> Second, am I allowed to take a persistent handle to a module? I am >>>>>> finding that after restoring a module from a persistent handle, I >>>>>> encounter >>>>>> the failure below. >>>>>> >>>>>> # >>>>>> # Fatal error in C:\621300de\v8\src/api/api-inl.h, line 128 >>>>>> # Debug check failed: allow_empty_handle || that != nullptr. >>>>>> # >>>>>> # >>>>>> # >>>>>> #FailureMessage Object: 0000006114FBC2E0 >>>>>> ==== C stack trace =============================== >>>>>> >>>>>> v8::base::debug::StackTrace::StackTrace >>>>>> [0x0,000,7FF,60D,F82,80B+27] >>>>>> v8::platform::DefaultPlatform::PostJob >>>>>> [0x0,000,7FF,60D,F7F,1E1+401] >>>>>> V8_Fatal [0x0,000,7FF,60C,251,B87+167] >>>>>> v8::base::PrintCheckOperand<unsigned __int64> >>>>>> [0x0,000,7FF,60C,251,683+627] >>>>>> v8::Module::GetStatus [0x0,000,7FF,60C,1E0,3FD+141] >>>>>> v8::Module::GetModuleNamespace [0x0,000,7FF,60C,1D1,243+19] >>>>>> >>>>>> -- >>>>>> -- >>>>>> 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. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/v8-users/6e1f91bb-9d1b-4e3e-b772-c1cdf71afb06n%40googlegroups.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/v8-users/6e1f91bb-9d1b-4e3e-b772-c1cdf71afb06n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> Camillo Bruni | 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 >>>>> >>>>> Diese E-Mail ist vertraulich. Falls Ssie diese fälschlicherweise >>>>> erhalten haben sollten, leiten Sie diese bitte nicht an jemand anderes >>>>> weiter, löschen Sie alle Kopien und Anhänge davon und lassen Sie mich >>>>> bitte >>>>> wissen, dass die E-Mail an die falsche Person gesendet wurde. This >>>>> e-mail is confidential. If you received this communication by mistake, >>>>> please don't forward it to anyone else, please erase all copies and >>>>> attachments, and please let me know that it has gone to the wrong person. >>>>> >>>>> -- >>>>> -- >>>>> 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. >>>>> >>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/v8-users/CAOeS1i9mEbcpxGQr1uNk%3DfAMPDi%2Bz%2Bzkun0eiopfphqErJJLAQ%40mail.gmail.com >>>>> >>>>> <https://groups.google.com/d/msgid/v8-users/CAOeS1i9mEbcpxGQr1uNk%3DfAMPDi%2Bz%2Bzkun0eiopfphqErJJLAQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/c4180f77-510f-4a8a-9667-7ea038f6b4e5n%40googlegroups.com.