| Index: test/mjsunit/debug-backtrace.js
|
| ===================================================================
|
| --- test/mjsunit/debug-backtrace.js (revision 1079)
|
| +++ test/mjsunit/debug-backtrace.js (working copy)
|
| @@ -43,14 +43,33 @@
|
| listenerCalled = false;
|
| exception = false;
|
|
|
| -function safeEval(code) {
|
| - try {
|
| - return eval('(' + code + ')');
|
| - } catch (e) {
|
| - return undefined;
|
| +
|
| +function ParsedResponse(json) {
|
| + this.response_ = eval('(' + json + ')');
|
| + this.refs_ = [];
|
| + if (this.response_.refs) {
|
| + for (var i = 0; i < this.response_.refs.length; i++) {
|
| + this.refs_[this.response_.refs[i].handle] = this.response_.refs[i];
|
| + }
|
| }
|
| }
|
|
|
| +
|
| +ParsedResponse.prototype.response = function() {
|
| + return this.response_;
|
| +}
|
| +
|
| +
|
| +ParsedResponse.prototype.body = function() {
|
| + return this.response_.body;
|
| +}
|
| +
|
| +
|
| +ParsedResponse.prototype.lookup = function(handle) {
|
| + return this.refs_[handle];
|
| +}
|
| +
|
| +
|
| function listener(event, exec_state, event_data, data) {
|
| try {
|
| if (event == Debug.DebugEvent.Break)
|
| @@ -60,13 +79,19 @@
|
| // 1: g
|
| // 2: [anonymous]
|
|
|
| + var response;
|
| + var backtrace;
|
| + var frame;
|
| + var source;
|
| +
|
| // Get the debug command processor.
|
| var dcp = exec_state.debugCommandProcessor();
|
|
|
| // Get the backtrace.
|
| var json;
|
| json = '{"seq":0,"type":"request","command":"backtrace"}'
|
| - var backtrace = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + backtrace = response.body();
|
| assertEquals(0, backtrace.fromFrame);
|
| assertEquals(3, backtrace.toFrame);
|
| assertEquals(3, backtrace.totalFrames);
|
| @@ -76,15 +101,16 @@
|
| assertEquals('frame', frames[i].type);
|
| }
|
| assertEquals(0, frames[0].index);
|
| - assertEquals("f", frames[0].func.name);
|
| + assertEquals("f", response.lookup(frames[0].func.ref).name);
|
| assertEquals(1, frames[1].index);
|
| - assertEquals("g", frames[1].func.name);
|
| + assertEquals("g", response.lookup(frames[1].func.ref).name);
|
| assertEquals(2, frames[2].index);
|
| - assertEquals("", frames[2].func.name);
|
| + assertEquals("", response.lookup(frames[2].func.ref).name);
|
|
|
| // Get backtrace with two frames.
|
| json = '{"seq":0,"type":"request","command":"backtrace","arguments":{"fromFrame":1,"toFrame":3}}'
|
| - var backtrace = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + backtrace = response.body();
|
| assertEquals(1, backtrace.fromFrame);
|
| assertEquals(3, backtrace.toFrame);
|
| assertEquals(3, backtrace.totalFrames);
|
| @@ -94,71 +120,77 @@
|
| assertEquals('frame', frames[i].type);
|
| }
|
| assertEquals(1, frames[0].index);
|
| - assertEquals("g", frames[0].func.name);
|
| + assertEquals("g", response.lookup(frames[0].func.ref).name);
|
| assertEquals(2, frames[1].index);
|
| - assertEquals("", frames[1].func.name);
|
| + assertEquals("", response.lookup(frames[1].func.ref).name);
|
|
|
| // Get the individual frames.
|
| - var frame;
|
| json = '{"seq":0,"type":"request","command":"frame"}'
|
| - frame = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + frame = response.body();
|
| assertEquals(0, frame.index);
|
| - assertEquals("f", frame.func.name);
|
| + assertEquals("f", response.lookup(frame.func.ref).name);
|
| assertTrue(frame.constructCall);
|
| assertEquals(31, frame.line);
|
| assertEquals(3, frame.column);
|
| assertEquals(2, frame.arguments.length);
|
| assertEquals('x', frame.arguments[0].name);
|
| - assertEquals('number', frame.arguments[0].value.type);
|
| - assertEquals(1, frame.arguments[0].value.value);
|
| + assertEquals('number', response.lookup(frame.arguments[0].value.ref).type);
|
| + assertEquals(1, response.lookup(frame.arguments[0].value.ref).value);
|
| assertEquals('y', frame.arguments[1].name);
|
| - assertEquals('undefined', frame.arguments[1].value.type);
|
| + assertEquals('undefined', response.lookup(frame.arguments[1].value.ref).type);
|
|
|
| json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":0}}'
|
| - frame = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + frame = response.body();
|
| assertEquals(0, frame.index);
|
| - assertEquals("f", frame.func.name);
|
| + assertEquals("f", response.lookup(frame.func.ref).name);
|
| assertEquals(31, frame.line);
|
| assertEquals(3, frame.column);
|
| assertEquals(2, frame.arguments.length);
|
| assertEquals('x', frame.arguments[0].name);
|
| - assertEquals('number', frame.arguments[0].value.type);
|
| - assertEquals(1, frame.arguments[0].value.value);
|
| + assertEquals('number', response.lookup(frame.arguments[0].value.ref).type);
|
| + assertEquals(1, response.lookup(frame.arguments[0].value.ref).value);
|
| assertEquals('y', frame.arguments[1].name);
|
| - assertEquals('undefined', frame.arguments[1].value.type);
|
| + assertEquals('undefined', response.lookup(frame.arguments[1].value.ref).type);
|
|
|
| json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":1}}'
|
| - frame = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + frame = response.body();
|
| assertEquals(1, frame.index);
|
| - assertEquals("g", frame.func.name);
|
| + assertEquals("g", response.lookup(frame.func.ref).name);
|
| 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}}'
|
| - frame = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + frame = response.body();
|
| assertEquals(2, frame.index);
|
| - assertEquals("", frame.func.name);
|
| + assertEquals("", response.lookup(frame.func.ref).name);
|
|
|
| // Source slices for the individual frames (they all refer to this script).
|
| json = '{"seq":0,"type":"request","command":"source",' +
|
| '"arguments":{"frame":0,"fromLine":30,"toLine":32}}'
|
| - source = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + source = response.body();
|
| assertEquals("function f(x, y) {", source.source.substring(0, 18));
|
| assertEquals(30, source.fromLine);
|
| assertEquals(32, source.toLine);
|
|
|
| json = '{"seq":0,"type":"request","command":"source",' +
|
| '"arguments":{"frame":1,"fromLine":31,"toLine":32}}'
|
| - source = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + source = response.body();
|
| assertEquals(" a=1;", source.source.substring(0, 6));
|
| assertEquals(31, source.fromLine);
|
| assertEquals(32, source.toLine);
|
|
|
| json = '{"seq":0,"type":"request","command":"source",' +
|
| '"arguments":{"frame":2,"fromLine":35,"toLine":36}}'
|
| - source = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + source = response.body();
|
| assertEquals(" new f(1);", source.source.substring(0, 11));
|
| assertEquals(35, source.fromLine);
|
| assertEquals(36, source.toLine);
|
| @@ -166,12 +198,13 @@
|
| // Test line interval way beyond this script will result in an error.
|
| json = '{"seq":0,"type":"request","command":"source",' +
|
| '"arguments":{"frame":0,"fromLine":10000,"toLine":20000}}'
|
| - response = safeEval(dcp.processDebugJSONRequest(json));
|
| - assertFalse(response.success);
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + assertFalse(response.response().success);
|
|
|
| // Test without arguments.
|
| json = '{"seq":0,"type":"request","command":"source"}'
|
| - source = safeEval(dcp.processDebugJSONRequest(json)).body;
|
| + response = new ParsedResponse(dcp.processDebugJSONRequest(json));
|
| + source = response.body();
|
| assertEquals(Debug.findScript(f).source, source.source);
|
|
|
| listenerCalled = true;
|
|
|