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

Unified Diff: src/d8.js

Issue 21080: Added the 'references' command to the debugger protocol to provide access to ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 10 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/debug-delay.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/d8.js
===================================================================
--- src/d8.js (revision 1230)
+++ src/d8.js (working copy)
@@ -282,6 +282,14 @@
this.request_ = this.dirCommandToJSONRequest_(args);
break;
+ case 'references':
+ this.request_ = this.referencesCommandToJSONRequest_(args);
+ break;
+
+ case 'instances':
+ this.request_ = this.instancesCommandToJSONRequest_(args);
+ break;
+
case 'source':
this.request_ = this.sourceCommandToJSONRequest_(args);
break;
@@ -363,7 +371,7 @@
// Check if the expression is a handle id in the form #<handle>#.
var handle_match = expression.match(/^#([0-9]*)#$/);
if (handle_match) {
- // Build an evaluate request.
+ // Build a lookup request.
var request = this.createRequest('lookup');
request.arguments = {};
request.arguments.handle = parseInt(handle_match[1]);
@@ -378,7 +386,22 @@
};
+// Create a JSON request for the references/instances command.
+DebugRequest.prototype.makeReferencesJSONRequest_ = function(handle, type) {
+ // Build a references request.
+ var handle_match = handle.match(/^#([0-9]*)#$/);
+ if (handle_match) {
+ var request = this.createRequest('references');
+ request.arguments = {};
+ request.arguments.type = type;
+ request.arguments.handle = parseInt(handle_match[1]);
+ return request.toJSONProtocol();
+ } else {
+ throw new Error('Invalid object id.');
+ }
+};
+
// Create a JSON request for the continue command.
DebugRequest.prototype.continueCommandToJSONRequest_ = function(args) {
var request = this.createRequest('continue');
@@ -505,6 +528,29 @@
};
+// Create a JSON request for the references command.
+DebugRequest.prototype.referencesCommandToJSONRequest_ = function(args) {
+ // Build an evaluate request from the text command.
+ if (args.length == 0) {
+ throw new Error('Missing object id.');
+ }
+
+ return this.makeReferencesJSONRequest_(args, 'referencedBy');
+};
+
+
+// Create a JSON request for the instances command.
+DebugRequest.prototype.instancesCommandToJSONRequest_ = function(args) {
+ // Build an evaluate request from the text command.
+ if (args.length == 0) {
+ throw new Error('Missing object id.');
+ }
+
+ // Build a references request.
+ return this.makeReferencesJSONRequest_(args, 'constructedBy');
+};
+
+
// Create a JSON request for the source command.
DebugRequest.prototype.sourceCommandToJSONRequest_ = function(args) {
// Build a evaluate request from the text command.
@@ -660,6 +706,40 @@
}
+function formatObject_(value, include_properties) {
+ var result = '';
+ result += formatHandleReference_(value);
+ result += ', type: object'
+ result += ', constructor ';
+ var ctor = value.constructorFunctionValue();
+ result += formatHandleReference_(ctor);
+ result += ', __proto__ ';
+ var proto = value.protoObjectValue();
+ result += formatHandleReference_(proto);
+ result += ', ';
+ result += value.propertyCount();
+ result += ' properties.';
+ if (include_properties) {
+ result += '\n';
+ for (var i = 0; i < value.propertyCount(); i++) {
+ result += ' ';
+ result += value.propertyName(i);
+ result += ': ';
+ var property_value = value.propertyValue(i);
+ if (property_value && property_value.type()) {
+ result += property_value.type();
+ } else {
+ result += '<no type>';
+ }
+ result += ' ';
+ result += formatHandleReference_(property_value);
+ result += '\n';
+ }
+ }
+ return result;
+}
+
+
// Convert a JSON response to text for display in a text based debugger.
function DebugResponseDetails(json_response) {
details = {text:'', running:false}
@@ -719,31 +799,7 @@
} else {
var value = response.bodyValue();
if (value.isObject()) {
- result += formatHandleReference_(value);
- result += ', type: object'
- result += ', constructor ';
- var ctor = value.constructorFunctionValue();
- result += formatHandleReference_(ctor);
- result += ', __proto__ ';
- var proto = value.protoObjectValue();
- result += formatHandleReference_(proto);
- result += ', ';
- result += value.propertyCount();
- result += ' properties.\n';
- for (var i = 0; i < value.propertyCount(); i++) {
- result += ' ';
- result += value.propertyName(i);
- result += ': ';
- var property_value = value.propertyValue(i);
- if (property_value && property_value.type()) {
- result += property_value.type();
- } else {
- result += '<no type>';
- }
- result += ' ';
- result += formatHandleReference_(property_value);
- result += '\n';
- }
+ result += formatObject_(value, true);
} else {
result += 'type: ';
result += value.type();
@@ -762,6 +818,18 @@
}
details.text = result;
break;
+
+ case 'references':
+ var count = body.length;
+ result += 'found ' + count + ' objects';
+ result += '\n';
+ for (var i = 0; i < count; i++) {
+ var value = response.bodyValue(i);
+ result += formatObject_(value, false);
+ result += '\n';
+ }
+ details.text = result;
+ break;
case 'source':
// Get the source from the response.
@@ -915,8 +983,12 @@
}
-ProtocolPackage.prototype.bodyValue = function() {
- return new ProtocolValue(this.packet_.body, this);
+ProtocolPackage.prototype.bodyValue = function(index) {
+ if (IS_UNDEFINED(index)) {
+ return new ProtocolValue(this.packet_.body, this);
+ } else {
+ return new ProtocolValue(this.packet_.body[index], this);
+ }
}
« no previous file with comments | « no previous file | src/debug-delay.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698