Hi, I read around a bit and did some changes. Instead of using an *ObjectTemplate *directly, for wrapping the C++ object, I created a *FunctionTemplate *first, used *SetClassName()* and then called *InstanceTemplate()* to create an *ObjectTemplate *from it. All handlers were set on this *ObjectTemplate*. Now the name is getting displayed for the returned object. :) However, there is a catch. When I set the callback *SetCallAsFunctionHandler()* on the *ObjectTemplate*, it stops working and starts showing up as *f anonymous()*. I need this because I want to further call the object as a function. ibon, can you please check if *SetCallAsFunctionHandler()* is set for your *ObjectTemplate*?
regards, Anoop R. S. On Tuesday, 22 May 2018 10:03:11 UTC+5:30, Anoop R. S. wrote: > > Thank you for your reply, ibon. > I am using *FunctionTemplate *to expose the keyword '*Point*'. So, it > will call the function registered with the *FunctionTemplate*. In that > function, I am using *ObjectTemplate* to wrap the C++ object and return. > For the *ObjectTemplate*, I am setting the handlers. ( > *v8::NamedPropertyHandlerConfiguration* and > *v8::IndexedPropertyHandlerConfiguration*) > I tried using *SetClassName()* on the *FunctionTemplate*. That worked in > a different way. Now, when I do mouse over on '*Point*', it is displaying > the string I am populating. > > > <https://lh3.googleusercontent.com/-PSLiQPCRb1I/WwOX4xdV49I/AAAAAAAAFsE/G3j_Hd1AhdQ6RlW0L0urVEDFpMW4L_MzQCLcBGAs/s1600/Capture.PNG> > > Where as, if *SetClassName()* is not called, it is displayed as > anonymous. > > > <https://lh3.googleusercontent.com/-R8rnC7ug-a0/WwOX-DvaSKI/AAAAAAAAFsI/Y8eMsL2C5_IYW7RKOStkOUMnThbqdf6PgCLcBGAs/s1600/Capture2.PNG> > > My aim is to change the value being displayed for the variable p, to which > I am returning an *ObjectTemplate*. > Or, is it that I can use a *FunctionTemplate* to return? In that case, > how can I set the handlers? > I used the source > *https://github.com/v8/v8/blob/master/samples/process.cc* > <https://github.com/v8/v8/blob/master/samples/process.cc> as a guide. > > Maybe I am not doing it properly here. The Embedder's guide says: > >> Each function template has an associated object template. This is used to >> configure objects created with this function as their constructor. > > But it seems I am using an unrelated *ObjectTemplate* to wrap C++ object. > Please correct me if I am wrong. I am inferring that you are using the > associated *ObjectTemplate *of the of the *FunctionTemplate *to wrap the > C++ object. > Also, from *v8.h:* > > /** > * Set the class name of the FunctionTemplate. This is used for > * printing objects created with the function created from the > * FunctionTemplate as its constructor. > */ > void SetClassName(Local<String> name); > This also leads me to believe that I am not using the *ObjectTemplate *as > intended. > > regards, > Anoop R. S. > > On Monday, 21 May 2018 14:03:25 UTC+5:30, ibon wrote: >> >> Have you tried setting the class name in the FunctionTemplate ? >> >> interface_template->SetClassName( v8::String ) >> >> This names my objects as expected. I also get [object MyObject] instead >> of [object Object] when calling Object's prototype toString. >> You also might want to name the prototype by setting the GetToStringTag >> symbol in the prototype object template. >> >> >> El lunes, 21 de mayo de 2018, 6:40:45 (UTC+2), Anoop R. S. escribió: >>> >>> Hi All, >>> I noticed another behaviour. If the callback *SetCallAsFunctionHandler() >>> *is implemented for the ObjectTemplate, the value of the object is >>> displayed as *f anonymous() *as shown below. >>> >>> >>> <https://lh3.googleusercontent.com/-CS_h9_oMPmM/WwJMTnHwc-I/AAAAAAAAFrg/aDVzcqVeqmEsmdi53rFQ1b0YV23r1ainQCLcBGAs/s1600/Capture.PNG> >>> >>> it seems to be overriding the callbacks >>> *NamedPropertyHandlerConfiguration* and >>> *IndexedPropertyHandlerConfiguration >>> *(with respect to how it is displayed only). >>> >>> Is there any way to override this behaviour? >>> >>> I tried tracking where it is getting populated as *function, *but ended >>> up in *CALL_GENERATED_CODE* called in *Invoke()* in *execution.cc* >>> >>> >>> regards, >>> Anoop R. S. >>> >>> On Tuesday, 8 May 2018 10:05:12 UTC+5:30, Anoop R. S. wrote: >>>> >>>> Hi All, >>>> I am trying out a debugger prototype using the remote debugger >>>> protocol. >>>> Going by the standard example in Embedder's Guide: >>>> C++ class: >>>> ------------- >>>> class Point { >>>> public: >>>> Point(int x, int y) : x_(x), y_(y) { } >>>> int x_, y_; >>>> } >>>> >>>> Usage in JavaScript: >>>> --------------------------- >>>> var p = Point(1,2); >>>> >>>> Has anyone tried debugging a wrapped C++ object that is being returned >>>> to Javascript? Is it possible? >>>> >>>> regards, >>>> Anoop R. S. >>>> >>> -- -- 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.