| 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; | 
| } | 
|  | 
|  |