For an example of what this means, you can look at v8/test/cctest/test-api.cc and look for GetCallingContext.
-- Mads On Thu, Jul 9, 2009 at 1:34 PM, Mads Sig Ager<a...@chromium.org> wrote: > Drew, > > quick answer: When you use V8 you have to enter a context before > giving V8 some code to execute. GetEntered() returns the last context > that you entered using the API. When you call JavaScript functions, > the JavaScript engine enters the context in which that function was > defined. When calling functions across frames, this context will be > different from the context that you entered through the API. > GetCurrent will always give you the context of the currently executing > function (the context in which the currently executing function was > declared). GetCalling will get you the context of the function that > called the function you are currently executing. > > Cheers, -- Mads > > On Thu, Jul 9, 2009 at 1:04 PM, Drew Wilson<atwil...@chromium.org> wrote: >> Hi all, >> I've been poking around quite a bit recently in the WebKit JS >> bindings/constructor code, trying to make some sense of their widespread use >> of the lexicalGlobalObject() - basically, it seems like looking at the >> lexicalGlobalObject() is seldom what they actually want, because it means >> that if you call between frames you unexpectedly start pulling things from a >> different context. >> As a very simple example (bear with me, I'll get to the chrome-specific >> question in a second) - imagine that you have a page containing a child >> frame. In the parent page, you define this: >> function getImage() { >> return new Image(); >> } >> ...now down in your child frame, you have code that does this: >> var image1 = new Image(); >> var image2 = parent.window.getImage(); >> assert(image1.__proto__ == image2.__proto__); // Fails in WebKit currently, >> because the Image constructor lookup uses the lexicalGlobalObject. >> >> JSC defines dynamicGlobalObject() and lexicalGlobalObject() - I suspect that >> they generally want to be using dynamicGlobalObject instead of >> lexicalGlobalObject when trying to access something from global scope. Or am >> I missing some subtlety here? >> That brings me to my Chromium/V8 question - there are 3 context-grabbing >> functions in V8: GetEntered(), GetCalling(), GetCurrent(). When is it >> appropriate to use one over the others (what are the effective differences)? >> The descriptions are kind of terse, and I'm afraid I'm missing some of the >> subtleties between "the context of the calling JavaScript code" vs "The >> context on the top of the stack" vs "The last entered context" (for example, >> I would have naively thought that the calling JavaScript code's context >> would *inherently* be the last entered one, and hence would be on the top of >> the stack, but clearly that's not true :) >> -atw >> >> >> > --~--~---------~--~----~------------~-------~--~----~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~----------~----~----~----~------~----~------~--~---