Author: [email protected]
Date: Fri May 15 08:52:37 2009
New Revision: 1977

Modified:
    branches/bleeding_edge/src/debug-delay.js
    branches/bleeding_edge/src/mirror-delay.js

Log:
If 'compactFormat' argument is passed in the request the response won't  
include referenced mirrors in the refs section instead each protocol  
reference object will contain some details necessary for displaying the  
referenced object in the graphical debugger when the object is not  
expanded. That allows to request full information lazily when the object is  
expanded.
Review URL: http://codereview.chromium.org/115401

Modified: branches/bleeding_edge/src/debug-delay.js
==============================================================================
--- branches/bleeding_edge/src/debug-delay.js   (original)
+++ branches/bleeding_edge/src/debug-delay.js   Fri May 15 08:52:37 2009
@@ -1462,6 +1462,9 @@
      if (from_index < 0 || to_index < 0) {
        return response.failed('Invalid frame number');
      }
+    if (request.arguments.compactFormat) {
+      response.setOption('compactFormat', true);
+    }
    }

    // Adjust the index.
@@ -1588,6 +1591,10 @@
    if (!IS_UNDEFINED(request.arguments.includeSource)) {
      includeSource = %ToBoolean(request.arguments.includeSource);
      response.setOption('includeSource', includeSource);
+  }
+
+  if (request.arguments.compactFormat) {
+    response.setOption('compactFormat', true);
    }

    // Lookup handles.

Modified: branches/bleeding_edge/src/mirror-delay.js
==============================================================================
--- branches/bleeding_edge/src/mirror-delay.js  (original)
+++ branches/bleeding_edge/src/mirror-delay.js  Fri May 15 08:52:37 2009
@@ -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();
-  }
-  if (propertyMirror.propertyType() != PropertyType.Normal) {
-    result.propertyType = propertyMirror.propertyType();
+  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();
    }
-  result.ref = propertyMirror.value().handle();
    return result;
  }


--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to