[webkit-dev] Function & Property Names
Kent Hansen
kent.hansen at nokia.com
Thu Apr 29 06:08:08 PDT 2010
Hi,
ext Nyx wrote:
> I'm in the process of writing a program to analyze traces of JavaScript code.
> This involves logging events that occur in the interpreter. Currently, I'm
> trying to just log function calls and property accesses. However, I'm unsure
> exactly how to go about getting the names (identifiers) associated with
> functions (and properties).
>
> I wrote the following piece of code just to test things out, which I
> inserted in Interpreter.cpp, in the definition of the op_call opcode, after
> the "vPC = newCodeBlock->instructions().begin();" line:
>
> JSGlobalObject* globalObject = callFrame->scopeChain()->globalObject;
>
> printf("Function call: %s\n",
> asFunction(v)->name(globalObject->globalExec()).ascii());
> printf("%s\n", newCodeBlock->ownerExecutable()->sourceURL().ascii());
> printf("%i\n", newCodeBlock->ownerExecutable()->lineNo());
>
Works for me.
You can pass callFrame to name() if you want, the result is the same.
What does your JavaScript look like?
E.g., if you're using a function expression
Foo.prototype.bar = function() { ... }
Then that function isn't going to have a name, e.g. your op_call code
will print an empty string if you do "f = new Foo(); f.bar();".
You could "partially" name it by doing
Foo.prototype.bar = function bar() { ... }
For function definitions (e.g. "function foo() { ... }" in global code),
the function is named accordingly.
Kent
More information about the webkit-dev
mailing list