Add function inferred name to FunctionMirror and its json representation.
Review URL: http://codereview.chromium.org/109026 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1871 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
bf63b8f173
commit
beb5161b84
@ -755,6 +755,15 @@ FunctionMirror.prototype.name = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Returns the inferred name of the function.
|
||||
* @return {string} Name of the function
|
||||
*/
|
||||
FunctionMirror.prototype.inferredName = function() {
|
||||
return %FunctionGetInferredName(this.value_);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Returns the source code for the function.
|
||||
* @return {string or undefined} The source code for the function. If the
|
||||
@ -857,6 +866,11 @@ UnresolvedFunctionMirror.prototype.name = function() {
|
||||
};
|
||||
|
||||
|
||||
UnresolvedFunctionMirror.prototype.inferredName = function() {
|
||||
return undefined;
|
||||
};
|
||||
|
||||
|
||||
UnresolvedFunctionMirror.prototype.propertyNames = function(kind, limit) {
|
||||
return [];
|
||||
}
|
||||
@ -1835,6 +1849,10 @@ JSONProtocolSerializer.prototype.serializeObject_ = function(mirror, content,
|
||||
if (mirror.isFunction()) {
|
||||
// Add function specific properties.
|
||||
content.push(MakeJSONPair_('name', StringToJSON_(mirror.name())));
|
||||
if (!IS_UNDEFINED(mirror.inferredName())) {
|
||||
content.push(MakeJSONPair_('inferredName',
|
||||
StringToJSON_(mirror.inferredName())));
|
||||
}
|
||||
content.push(MakeJSONPair_('resolved', BooleanToJSON_(mirror.resolved())));
|
||||
if (mirror.resolved()) {
|
||||
content.push(MakeJSONPair_('source', StringToJSON_(mirror.source())));
|
||||
|
@ -6860,6 +6860,15 @@ static Object* Runtime_FunctionGetAssemblerCode(Arguments args) {
|
||||
#endif // DEBUG
|
||||
return Heap::undefined_value();
|
||||
}
|
||||
|
||||
|
||||
static Object* Runtime_FunctionGetInferredName(Arguments args) {
|
||||
NoHandleAllocation ha;
|
||||
ASSERT(args.length() == 1);
|
||||
|
||||
CONVERT_CHECKED(JSFunction, f, args[0]);
|
||||
return f->shared()->inferred_name();
|
||||
}
|
||||
#endif // ENABLE_DEBUGGER_SUPPORT
|
||||
|
||||
|
||||
|
@ -298,7 +298,8 @@ namespace v8 { namespace internal {
|
||||
F(DebugConstructedBy, 2) \
|
||||
F(DebugGetPrototype, 1) \
|
||||
F(SystemBreak, 0) \
|
||||
F(FunctionGetAssemblerCode, 1)
|
||||
F(FunctionGetAssemblerCode, 1) \
|
||||
F(FunctionGetInferredName, 1)
|
||||
#else
|
||||
#define RUNTIME_FUNCTION_LIST_DEBUGGER_SUPPORT(F)
|
||||
#endif
|
||||
|
@ -32,10 +32,14 @@ function f(x, y) {
|
||||
a=1;
|
||||
};
|
||||
|
||||
function g() {
|
||||
var m = function() {
|
||||
new f(1);
|
||||
};
|
||||
|
||||
function g() {
|
||||
m();
|
||||
};
|
||||
|
||||
|
||||
// Get the Debug object exposed from the debug context global object.
|
||||
Debug = debug.Debug
|
||||
@ -90,22 +94,26 @@ function listener(event, exec_state, event_data, data) {
|
||||
// Get the backtrace.
|
||||
var json;
|
||||
json = '{"seq":0,"type":"request","command":"backtrace"}'
|
||||
response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
||||
var resp = dcp.processDebugJSONRequest(json);
|
||||
response = new ParsedResponse(resp);
|
||||
backtrace = response.body();
|
||||
assertEquals(0, backtrace.fromFrame);
|
||||
assertEquals(3, backtrace.toFrame);
|
||||
assertEquals(3, backtrace.totalFrames);
|
||||
assertEquals(4, backtrace.toFrame);
|
||||
assertEquals(4, backtrace.totalFrames);
|
||||
var frames = backtrace.frames;
|
||||
assertEquals(3, frames.length);
|
||||
assertEquals(4, frames.length);
|
||||
for (var i = 0; i < frames.length; i++) {
|
||||
assertEquals('frame', frames[i].type);
|
||||
}
|
||||
assertEquals(0, frames[0].index);
|
||||
assertEquals("f", response.lookup(frames[0].func.ref).name);
|
||||
assertEquals(1, frames[1].index);
|
||||
assertEquals("g", response.lookup(frames[1].func.ref).name);
|
||||
assertEquals("", response.lookup(frames[1].func.ref).name);
|
||||
assertEquals("m", response.lookup(frames[1].func.ref).inferredName);
|
||||
assertEquals(2, frames[2].index);
|
||||
assertEquals("", response.lookup(frames[2].func.ref).name);
|
||||
assertEquals("g", response.lookup(frames[2].func.ref).name);
|
||||
assertEquals(3, frames[3].index);
|
||||
assertEquals("", response.lookup(frames[3].func.ref).name);
|
||||
|
||||
// Get backtrace with two frames.
|
||||
json = '{"seq":0,"type":"request","command":"backtrace","arguments":{"fromFrame":1,"toFrame":3}}'
|
||||
@ -113,16 +121,17 @@ function listener(event, exec_state, event_data, data) {
|
||||
backtrace = response.body();
|
||||
assertEquals(1, backtrace.fromFrame);
|
||||
assertEquals(3, backtrace.toFrame);
|
||||
assertEquals(3, backtrace.totalFrames);
|
||||
assertEquals(4, backtrace.totalFrames);
|
||||
var frames = backtrace.frames;
|
||||
assertEquals(2, frames.length);
|
||||
for (var i = 0; i < frames.length; i++) {
|
||||
assertEquals('frame', frames[i].type);
|
||||
}
|
||||
assertEquals(1, frames[0].index);
|
||||
assertEquals("g", response.lookup(frames[0].func.ref).name);
|
||||
assertEquals("", response.lookup(frames[0].func.ref).name);
|
||||
assertEquals("m", response.lookup(frames[0].func.ref).inferredName);
|
||||
assertEquals(2, frames[1].index);
|
||||
assertEquals("", response.lookup(frames[1].func.ref).name);
|
||||
assertEquals("g", response.lookup(frames[1].func.ref).name);
|
||||
|
||||
// Get the individual frames.
|
||||
json = '{"seq":0,"type":"request","command":"frame"}'
|
||||
@ -158,16 +167,17 @@ function listener(event, exec_state, event_data, data) {
|
||||
response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
||||
frame = response.body();
|
||||
assertEquals(1, frame.index);
|
||||
assertEquals("g", response.lookup(frame.func.ref).name);
|
||||
assertEquals("", response.lookup(frame.func.ref).name);
|
||||
assertEquals("m", response.lookup(frame.func.ref).inferredName);
|
||||
assertFalse(frame.constructCall);
|
||||
assertEquals(35, frame.line);
|
||||
assertEquals(2, frame.column);
|
||||
assertEquals(0, frame.arguments.length);
|
||||
|
||||
json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":2}}'
|
||||
json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":3}}'
|
||||
response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
||||
frame = response.body();
|
||||
assertEquals(2, frame.index);
|
||||
assertEquals(3, frame.index);
|
||||
assertEquals("", response.lookup(frame.func.ref).name);
|
||||
|
||||
// Source slices for the individual frames (they all refer to this script).
|
||||
|
@ -57,6 +57,7 @@ assertEquals('function', mirror.type());
|
||||
assertFalse(mirror.isPrimitive());
|
||||
assertEquals("Function", mirror.className());
|
||||
assertEquals("f", mirror.name());
|
||||
assertEquals('undefined', typeof mirror.inferredName());
|
||||
assertFalse(mirror.resolved());
|
||||
assertEquals(void 0, mirror.source());
|
||||
assertEquals('undefined', mirror.constructorFunction().type());
|
||||
@ -75,4 +76,5 @@ assertEquals(mirror.prototypeObject().handle(), fromJSON.prototypeObject.ref, 'U
|
||||
assertEquals('undefined', refs.lookup(fromJSON.prototypeObject.ref).type, 'Unexpected prototype object type in JSON');
|
||||
assertFalse(fromJSON.resolved);
|
||||
assertEquals("f", fromJSON.name);
|
||||
assertFalse('inferredName' in fromJSON);
|
||||
assertEquals(void 0, fromJSON.source);
|
||||
|
Loading…
Reference in New Issue
Block a user