Index: src/debug-delay.js |
=================================================================== |
--- src/debug-delay.js (revision 1373) |
+++ src/debug-delay.js (working copy) |
@@ -871,28 +871,32 @@ |
ExceptionEvent.prototype.toJSONProtocol = function() { |
- var o = { seq: next_response_seq++, |
- type: "event", |
- event: "exception", |
- body: { uncaught: this.uncaught_, |
- exception: MakeMirror(this.exception_), |
- sourceLine: this.sourceLine(), |
- sourceColumn: this.sourceColumn(), |
- sourceLineText: this.sourceLineText(), |
- } |
- } |
+ var o = new ProtocolMessage(); |
+ o.event = "exception"; |
+ o.body = { uncaught: this.uncaught_, |
+ exception: MakeMirror(this.exception_) |
+ } |
+ |
+ // Exceptions might happen whithout any JavaScript frames. |
+ if (this.exec_state_.frameCount() > 0) { |
+ o.body.sourceLine = this.sourceLine(); |
+ o.body.sourceColumn = this.sourceColumn(); |
+ o.body.sourceLineText = this.sourceLineText(); |
- // Add script information to the event if available. |
- var script = this.func().script(); |
- if (script) { |
- o.body.script = { name: script.name(), |
- lineOffset: script.lineOffset(), |
- columnOffset: script.columnOffset(), |
- lineCount: script.lineCount() |
- }; |
+ // Add script information to the event if available. |
+ var script = this.func().script(); |
+ if (script) { |
+ o.body.script = { name: script.name(), |
+ lineOffset: script.lineOffset(), |
+ columnOffset: script.columnOffset(), |
+ lineCount: script.lineCount() |
+ }; |
+ } |
+ } else { |
+ o.body.sourceLine = -1; |
} |
- return SimpleObjectToJSON_(o); |
+ return o.toJSONProtocol(); |
}; |
@@ -927,6 +931,25 @@ |
}; |
+CompileEvent.prototype.toJSONProtocol = function() { |
+ var o = new ProtocolMessage(); |
+ if (this.before_) { |
+ o.event = "beforeCompile"; |
+ } else { |
+ o.event = "afterCompile"; |
+ } |
+ o.body = {}; |
+ o.body.script = { name: this.script_.name(), |
+ lineOffset: this.script_.lineOffset(), |
+ columnOffset: this.script_.columnOffset(), |
+ lineCount: this.script_.lineCount(), |
+ source: this.script_.source() |
+ }; |
+ |
+ return o.toJSONProtocol(); |
+} |
+ |
+ |
function MakeNewFunctionEvent(func) { |
return new NewFunctionEvent(func); |
} |
@@ -963,24 +986,32 @@ |
} |
-function ResponsePacket(request) { |
- // Build the initial response from the request. |
+function ProtocolMessage(request) { |
+ // Update sequence number. |
this.seq = next_response_seq++; |
- this.type = 'response'; |
- if (request) this.request_seq = request.seq; |
- if (request) this.command = request.command; |
+ |
+ if (request) { |
+ // If message is based on a request this is a response. Fill the initial |
+ // response from the request. |
+ this.type = 'response'; |
+ this.request_seq = request.seq; |
+ this.command = request.command; |
+ } else { |
+ // If message is not based on a request it is a dabugger generated event. |
+ this.type = 'event'; |
+ } |
this.success = true; |
this.running = false; |
} |
-ResponsePacket.prototype.failed = function(message) { |
+ProtocolMessage.prototype.failed = function(message) { |
this.success = false; |
this.message = message; |
} |
-ResponsePacket.prototype.toJSONProtocol = function() { |
+ProtocolMessage.prototype.toJSONProtocol = function() { |
// Encode the protocol header. |
var json = '{'; |
json += '"seq":' + this.seq; |
@@ -988,6 +1019,9 @@ |
json += ',"request_seq":' + this.request_seq; |
} |
json += ',"type":"' + this.type + '"'; |
+ if (this.event) { |
+ json += ',"event":' + StringToJSON_(this.event); |
+ } |
if (this.command) { |
json += ',"command":' + StringToJSON_(this.command); |
} |
@@ -1033,7 +1067,7 @@ |
DebugCommandProcessor.prototype.createResponse = function(request) { |
- return new ResponsePacket(request); |
+ return new ProtocolMessage(request); |
}; |
@@ -1652,7 +1686,9 @@ |
var property_value_json; |
switch (typeof property_value) { |
case 'object': |
- if (typeof property_value.toJSONProtocol == 'function') { |
+ if (property_value instanceof Mirror) { |
+ property_value_json = mirror_serializer.serializeValue(property_value); |
+ } else if (typeof property_value.toJSONProtocol == 'function') { |
property_value_json = property_value.toJSONProtocol(true) |
} else if (IS_ARRAY(property_value)){ |
property_value_json = SimpleArrayToJSON_(property_value, mirror_serializer); |