Index: src/mirror-delay.js |
=================================================================== |
--- src/mirror-delay.js (revision 1968) |
+++ src/mirror-delay.js (working copy) |
@@ -1752,6 +1752,11 @@ |
} |
+JSONProtocolSerializer.prototype.compactFormat_ = function() { |
+ return this.options_ && this.options_.compactFormat; |
+} |
+ |
+ |
JSONProtocolSerializer.prototype.add_ = function(mirror) { |
// If this mirror is already in the list just return. |
for (var i = 0; i < this.mirrors_.length; i++) { |
@@ -1765,14 +1770,58 @@ |
} |
+/** |
+ * Formats mirror object to protocol reference object with some data that can |
+ * be used to display the value in debugger. |
+ * @param {Mirror} mirror Mirror to serialize. |
+ * @return {Object} Protocol reference object. |
+ */ |
+JSONProtocolSerializer.prototype.serializeReferenceWithDisplayData_ = |
+ function(mirror) { |
+ var o = {}; |
+ o.ref = mirror.handle(); |
+ o.type = mirror.type(); |
+ switch (mirror.type()) { |
+ case UNDEFINED_TYPE: |
+ case NULL_TYPE: |
+ case BOOLEAN_TYPE: |
+ case NUMBER_TYPE: |
+ o.value = mirror.value(); |
+ break; |
+ case STRING_TYPE: |
+ // Limit string length. |
+ o.value = mirror.toText(); |
+ break; |
+ case FUNCTION_TYPE: |
+ o.name = mirror.name(); |
+ o.inferredName = mirror.inferredName(); |
+ if (mirror.script()) { |
+ o.scriptId = mirror.script().id(); |
+ } |
+ break; |
+ case ERROR_TYPE: |
+ case REGEXP_TYPE: |
+ o.value = mirror.toText(); |
+ break; |
+ case OBJECT_TYPE: |
+ o.className = mirror.className(); |
+ break; |
+ } |
+ return o; |
+}; |
+ |
JSONProtocolSerializer.prototype.serialize_ = function(mirror, reference, |
details) { |
// If serializing a reference to a mirror just return the reference and add |
// the mirror to the referenced mirrors. |
if (reference && |
(mirror.isValue() || mirror.isScript() || mirror.isContext())) { |
- this.add_(mirror); |
- return {'ref' : mirror.handle()}; |
+ if (this.compactFormat_() && mirror.isValue()) { |
+ return this.serializeReferenceWithDisplayData_(mirror); |
+ } else { |
+ this.add_(mirror); |
+ return {'ref' : mirror.handle()}; |
+ } |
} |
// Collect the JSON property/value pairs. |
@@ -1965,13 +2014,18 @@ |
var result = {}; |
result.name = propertyMirror.name(); |
- if (propertyMirror.attributes() != PropertyAttribute.None) { |
- result.attributes = propertyMirror.attributes(); |
+ var propertyValue = propertyMirror.value(); |
+ if (this.compactFormat_() && propertyValue.isValue()) { |
+ result.value = this.serializeReferenceWithDisplayData_(propertyValue); |
+ } else { |
+ if (propertyMirror.attributes() != PropertyAttribute.None) { |
+ result.attributes = propertyMirror.attributes(); |
+ } |
+ if (propertyMirror.propertyType() != PropertyType.Normal) { |
+ result.propertyType = propertyMirror.propertyType(); |
+ } |
+ result.ref = propertyValue.handle(); |
} |
- if (propertyMirror.propertyType() != PropertyType.Normal) { |
- result.propertyType = propertyMirror.propertyType(); |
- } |
- result.ref = propertyMirror.value().handle(); |
return result; |
} |