I think Jochen's solution would be better in the long term. Keeping Callee() and instantiating a FunctionTemplate if it gets called seems slightly more complex.
In the meantime, should I revert the change (marking Callee as deprecated or deprecate soon)? On Friday, December 11, 2015 at 8:48:22 AM UTC+1, Jochen Eisinger wrote: > > One alternative to using Callee for functions you created yourself is > specifying the data parameter which is passed via FunctionCallbackInfo::Data > > Data could be an External that points to a data structure holding a weak > Global pointing back at the function. > > Would that work for you? > > On Fri, Dec 11, 2015, 8:41 AM Toon Verwaest <verw...@chromium.org > <javascript:>> wrote: > >> The difference is that FunctionTemplates are (supposedly) unique for the >> entire isolate, whereas JSFunctions are instantiated per native context. So >> if you use multiple realms (iframes in a browser setting), you'd be getting >> multiple Callees (jsfunction) for the same callback (FunctionTemplate). >> >> Preallocating all of those is expensive memory-wise and in terms of >> context-initialization. Getting to all-can-read accessors (jsfunction from >> the accessing context rather than the installed accessor) is either >> expensive performance-wise while accessing; or makes the memory and >> initialization issues even worse. >> >> My thinking now is that we could hide the cost inside of info.Callee(), >> by instantiating the FunctionTemplate in the current (accessing) context if >> the value passed in was null or some other sentinel. That makes it slightly >> more expensive for regular templates (the null check), and quite a bit more >> for lazy instantiated templates that access Callee. The latter should just >> not be used in that scenario... >> >> On Thu, Dec 10, 2015, 23:25 Alex Kodat <alex...@gmail.com <javascript:>> >> wrote: >> >>> That makes great sense to me and would be much appreciated. Though I'll >>> admit I don't really understand what it means to call a FunctionTemplate. I >>> guess for C++ code there really isn't any containing JS scope so the >>> distinction between Function and FunctionTemplate is kinda (largely?) >>> meaningless? >>> >>> >>> On Thursday, December 10, 2015 at 1:25:38 PM UTC-8, Toon Verwaest wrote: >>> >>>> The reasoning behind this change is that in the future we'll have >>>> FunctionTemplates that can be called through accessors without even >>>> allocating the JSFunction. Registering the last called value isn't >>>> possible >>>> in that case... >>>> >>>> Perhaps rather than fully getting rid of the parameter we should change >>>> the API to pass undefined if there is no closure. In that case the >>>> FunctionTemplate would need to be instantiated manually through the API to >>>> get to the callee. >>>> >>>> Wdyt Enrico? >>>> Toon >>>> >>>> On Thu, Dec 10, 2015, 20:59 Alex Kodat <alex...@gmail.com> wrote: >>>> >>> Sorry if this would have been more appropriate on v8-dev but just >>>>> downloaded the latest and greatest 4.9 commit and discovered that Callee >>>>> is >>>>> no longer available in FunctionCallBackInfo. While I'm sure there was a >>>>> good reason for this, my sample size of one embedder registers one >>>>> "ouch". >>>>> Dunno if this affects any other embedders but I guess this is a head's up >>>>> in case anyone wants to check. >>>>> >>>>> I currently use Callee as a convenience when passing around >>>>> FunctionCallBackInfo: for adding the function name to a Throw or as >>>>> debugging information it's very convenient. Callee is also very useful in >>>>> the common pattern of allowing a constructor to be called without a New >>>>> and >>>>> invoking it as a constructor under the covers: >>>>> args.Callee()->NewInstance(argc, argsForConstructor). >>>>> >>>>> The former use is easy to work around but painful as I now need to add >>>>> an extra parameter to a ton of internal C++ methods. The latter is more >>>>> challenging as I now need to add a persistent reference to all my C++ >>>>> constructors. >>>>> >>>>> I guess I'll just suck it up but if this affects anyone else one way >>>>> to help people deal with this would be to keep a weak reference in the >>>>> Isolate to last C++ function called that's made available via something >>>>> like isolate->LastCallee(). I'd be happy to submit a project to add such >>>>> a >>>>> call (obviously on purely selfish grounds) but I suspect it would be >>>>> (justifiably) rejected if I'm the world's only user of Callee. >>>>> >>>>> So are there any others out there? >>>>> >>>>> Thanks >>>>> >>>>> -- >>>>> -- >>>>> 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-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. >>> >> -- >> -- >> 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. >> > -- -- 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.