Browse Source

[debugger] deep cloning (depth = 3)

Fedor Indutny 13 years ago
parent
commit
db6526f962
  1. 42
      lib/_debugger.js

42
lib/_debugger.js

@ -445,7 +445,7 @@ Client.prototype.step = function(action, count, cb) {
}; };
Client.prototype.mirrorObject = function(handle, cb) { Client.prototype.mirrorObject = function(handle, depth, cb) {
var self = this; var self = this;
var val; var val;
@ -476,15 +476,19 @@ Client.prototype.mirrorObject = function(handle, cb) {
return; return;
} }
var mirror; var mirror,
waiting = 1;
if (handle.className == 'Array') { if (handle.className == 'Array') {
mirror = []; mirror = [];
} else { } else {
mirror = {}; mirror = {};
} }
for (var i = 0; i < handle.properties.length; i++) {
var value = res.body[handle.properties[i].ref]; var keyValues = [];
handle.properties.forEach(function(prop, i) {
var value = res.body[prop.ref];
var mirrorValue; var mirrorValue;
if (value) { if (value) {
mirrorValue = value.value ? value.value : value.text; mirrorValue = value.value ? value.value : value.text;
@ -494,15 +498,33 @@ Client.prototype.mirrorObject = function(handle, cb) {
if (Array.isArray(mirror) && if (Array.isArray(mirror) &&
typeof handle.properties[i].name != 'number') { typeof prop.name != 'number') {
// Skip the 'length' property. // Skip the 'length' property.
continue; return;
} }
mirror[handle.properties[i].name] = mirrorValue; keyValues[i] = {
} name: prop.name,
value: mirrorValue
};
if (value.handle && depth > 0) {
waiting++;
self.mirrorObject(value, depth - 1, function(result) {
keyValues[i].value = result;
waitForOthers();
});
}
});
if (cb) cb(mirror); waitForOthers();
function waitForOthers() {
if (--waiting === 0 && cb) {
keyValues.forEach(function(kv) {
mirror[kv.name] = kv.value;
});
cb(mirror);
}
};
}); });
return; return;
} else if (handle.type === 'function') { } else if (handle.type === 'function') {
@ -775,7 +797,7 @@ Interface.prototype.debugEval = function(code, context, filename, callback) {
return; return;
} }
client.mirrorObject(res.body, function(mirror) { client.mirrorObject(res.body, 3, function(mirror) {
callback(null, mirror); callback(null, mirror);
self.resume(true); self.resume(true);
}); });

Loading…
Cancel
Save