Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2330)

Unified Diff: src/debug-delay.js

Issue 113399: Use JSON.stringify to serialize debugger messages (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/mirror-delay.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/debug-delay.js
===================================================================
--- src/debug-delay.js (revision 1956)
+++ src/debug-delay.js (working copy)
@@ -833,7 +833,7 @@
event: "break",
body: { invocationText: this.exec_state_.frame(0).invocationText(),
}
- }
+ };
// Add script related information to the event if available.
var script = this.func().script();
@@ -861,8 +861,7 @@
o.body.breakpoints.push(number);
}
}
-
- return SimpleObjectToJSON_(o);
+ return JSON.stringify(ObjectToProtocolObject_(o));
};
@@ -923,7 +922,7 @@
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) {
@@ -1079,56 +1078,53 @@
ProtocolMessage.prototype.toJSONProtocol = function() {
// Encode the protocol header.
- var json = '{';
- json += '"seq":' + this.seq;
+ var json = {};
+ json.seq= this.seq;
if (this.request_seq) {
- json += ',"request_seq":' + this.request_seq;
+ json.request_seq = this.request_seq;
}
- json += ',"type":"' + this.type + '"';
+ json.type = this.type;
if (this.event) {
- json += ',"event":' + StringToJSON_(this.event);
+ json.event = this.event;
}
if (this.command) {
- json += ',"command":' + StringToJSON_(this.command);
+ json.command = this.command;
}
if (this.success) {
- json += ',"success":' + this.success;
+ json.success = this.success;
} else {
- json += ',"success":false';
+ json.success = false;
}
if (this.body) {
- json += ',"body":';
// Encode the body part.
+ var bodyJson;
var serializer = MakeMirrorSerializer(true, this.options_);
if (this.body instanceof Mirror) {
- json += serializer.serializeValue(this.body);
+ bodyJson = serializer.serializeValue(this.body);
} else if (this.body instanceof Array) {
- json += '[';
+ bodyJson = [];
for (var i = 0; i < this.body.length; i++) {
- if (i != 0) json += ',';
if (this.body[i] instanceof Mirror) {
- json += serializer.serializeValue(this.body[i]);
+ bodyJson.push(serializer.serializeValue(this.body[i]));
} else {
- json += SimpleObjectToJSON_(this.body[i], serializer);
+ bodyJson.push(ObjectToProtocolObject_(this.body[i], serializer));
}
}
- json += ']';
} else {
- json += SimpleObjectToJSON_(this.body, serializer);
+ bodyJson = ObjectToProtocolObject_(this.body, serializer);
}
- json += ',"refs":';
- json += serializer.serializeReferencedObjects();
+ json.body = bodyJson;
+ json.refs = serializer.serializeReferencedObjects();
}
if (this.message) {
- json += ',"message":' + StringToJSON_(this.message) ;
+ json.message = this.message;
}
if (this.running) {
- json += ',"running":true';
+ json.running = true;
} else {
- json += ',"running":false';
+ json.running = false;
}
- json += '}';
- return json;
+ return JSON.stringify(json);
}
@@ -1799,97 +1795,82 @@
/**
- * Convert an Object to its JSON representation (see http://www.json.org/).
- * This implementation simply runs through all string property names and adds
- * each property to the JSON representation for some predefined types. For type
- * "object" the function calls itself recursively unless the object has the
- * function property "toJSONProtocol" in which case that is used. This is not
- * a general implementation but sufficient for the debugger. Note that circular
- * structures will cause infinite recursion.
- * @param {Object} object The object to format as JSON
+ * Convert an Object to its debugger protocol representation. The representation
+ * may be serilized to a JSON object using JSON.stringify().
+ * This implementation simply runs through all string property names, converts
+ * each property value to a protocol value and adds the property to the result
+ * object. For type "object" the function will be called recursively. Note that
+ * circular structures will cause infinite recursion.
+ * @param {Object} object The object to format as protocol object.
* @param {MirrorSerializer} mirror_serializer The serializer to use if any
* mirror objects are encountered.
- * @return {string} JSON formatted object value
+ * @return {Object} Protocol object value.
*/
-function SimpleObjectToJSON_(object, mirror_serializer) {
- var content = [];
+function ObjectToProtocolObject_(object, mirror_serializer) {
+ var content = {};
for (var key in object) {
// Only consider string keys.
if (typeof key == 'string') {
- var property_value = object[key];
-
// Format the value based on its type.
- var property_value_json;
- switch (typeof property_value) {
- case 'object':
- 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);
- } else {
- property_value_json = SimpleObjectToJSON_(property_value, mirror_serializer);
- }
- break;
-
- case 'boolean':
- property_value_json = BooleanToJSON_(property_value);
- break;
-
- case 'number':
- property_value_json = NumberToJSON_(property_value);
- break;
-
- case 'string':
- property_value_json = StringToJSON_(property_value);
- break;
-
- default:
- property_value_json = null;
- }
-
+ var property_value_json = ValueToProtocolValue_(object[key],
+ mirror_serializer);
// Add the property if relevant.
- if (property_value_json) {
- content.push(StringToJSON_(key) + ':' + property_value_json);
+ if (!IS_UNDEFINED(property_value_json)) {
+ content[key] = property_value_json;
}
}
}
-
- // Make JSON object representation.
- return '{' + content.join(',') + '}';
+
+ return content;
}
+
/**
- * Convert an array to its JSON representation. This is a VERY simple
- * implementation just to support what is needed for the debugger.
- * @param {Array} array The array to format as JSON
+ * Convert an array to its debugger protocol representation. It will convert
+ * each array element to a protocol value.
+ * @param {Array} array The array to format as protocol array.
* @param {MirrorSerializer} mirror_serializer The serializer to use if any
* mirror objects are encountered.
- * @return {string} JSON formatted array value
+ * @return {Array} Protocol array value.
*/
-function SimpleArrayToJSON_(array, mirror_serializer) {
- // Make JSON array representation.
- var json = '[';
+function ArrayToProtocolArray_(array, mirror_serializer) {
+ var json = [];
for (var i = 0; i < array.length; i++) {
- if (i != 0) {
- json += ',';
- }
- var elem = array[i];
- if (elem instanceof Mirror) {
- json += mirror_serializer.serializeValue(elem);
- } else if (IS_OBJECT(elem)) {
- json += SimpleObjectToJSON_(elem);
- } else if (IS_BOOLEAN(elem)) {
- json += BooleanToJSON_(elem);
- } else if (IS_NUMBER(elem)) {
- json += NumberToJSON_(elem);
- } else if (IS_STRING(elem)) {
- json += StringToJSON_(elem);
- } else {
- json += elem;
- }
+ json.push(ValueToProtocolValue_(array[i], mirror_serializer));
}
- json += ']';
return json;
}
+
+
+/**
+ * Convert a value to its debugger protocol representation.
+ * @param {*} value The value to format as protocol value.
+ * @param {MirrorSerializer} mirror_serializer The serializer to use if any
+ * mirror objects are encountered.
+ * @return {*} Protocol value.
+ */
+function ValueToProtocolValue_(value, mirror_serializer) {
+ // Format the value based on its type.
+ var json;
+ switch (typeof value) {
+ case 'object':
+ if (value instanceof Mirror) {
+ json = mirror_serializer.serializeValue(value);
+ } else if (IS_ARRAY(value)){
+ json = ArrayToProtocolArray_(value, mirror_serializer);
+ } else {
+ json = ObjectToProtocolObject_(value, mirror_serializer);
+ }
+ break;
+
+ case 'boolean':
+ case 'string':
+ case 'number':
+ json = value;
+ break
+
+ default:
+ json = null;
+ }
+ return json;
+}
« no previous file with comments | « no previous file | src/mirror-delay.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698