Chromium Code Reviews| Index: src/mirror-delay.js |
| =================================================================== |
| --- src/mirror-delay.js (revision 1869) |
| +++ src/mirror-delay.js (working copy) |
| @@ -155,6 +155,7 @@ |
| const PROPERTY_TYPE = 'property'; |
| const FRAME_TYPE = 'frame'; |
| const SCRIPT_TYPE = 'script'; |
| +const CONTEXT_TYPE = 'context'; |
| // Maximum length when sending strings through the JSON protocol. |
| const kMaxProtocolStringLength = 80; |
| @@ -364,6 +365,15 @@ |
| /** |
| + * Check whether the mirror reflects a context. |
| + * @returns {boolean} True if the mirror reflects a context |
| + */ |
| +Mirror.prototype.isContext = function() { |
| + return this instanceof ContextMirror; |
| +} |
| + |
| + |
| +/** |
| * Allocate a handle id for this object. |
| */ |
| Mirror.prototype.allocateHandle_ = function() { |
| @@ -1547,6 +1557,7 @@ |
| function ScriptMirror(script) { |
| Mirror.call(this, SCRIPT_TYPE); |
| this.script_ = script; |
| + this.context_ = new ContextMirror(script.context_data); |
| this.allocateHandle_(); |
| } |
| inherits(ScriptMirror, Mirror); |
| @@ -1608,6 +1619,11 @@ |
| } |
| +ScriptMirror.prototype.context = function() { |
| + return this.context_; |
| +}; |
| + |
| + |
| ScriptMirror.prototype.toText = function() { |
| var result = ''; |
| result += this.name(); |
| @@ -1625,13 +1641,35 @@ |
| /** |
| + * Mirror object for context. |
| + * @param {Object} data The context data |
| + * @constructor |
| + * @extends Mirror |
| + */ |
| +function ContextMirror(data) { |
| + Mirror.call(this, CONTEXT_TYPE); |
| + this.data_ = data; |
| + this.allocateHandle_(); |
| +} |
| +inherits(ContextMirror, Mirror); |
| + |
| + |
| +ContextMirror.prototype.data = function() { |
| + return this.data_; |
| +}; |
| + |
| + |
| +/** |
| * Returns a mirror serializer |
| * |
| * @param {boolean} details Set to true to include details |
| + * @param {Object} options Options comtrolling the serialization |
| + * The following options can be set: |
| + * includeSource: include ths full source of scripts |
| * @returns {MirrorSerializer} mirror serializer |
| */ |
| -function MakeMirrorSerializer(details) { |
| - return new JSONProtocolSerializer(details); |
| +function MakeMirrorSerializer(details, options) { |
| + return new JSONProtocolSerializer(details, options); |
| } |
| @@ -1641,8 +1679,9 @@ |
| * serialized |
| * @constructor |
| */ |
| -function JSONProtocolSerializer(details) { |
| +function JSONProtocolSerializer(details, options) { |
| this.details_ = details; |
| + this.options_ = options; |
| this.mirrors_ = [ ]; |
| } |
| @@ -1694,6 +1733,11 @@ |
| } |
| +JSONProtocolSerializer.prototype.includeSource_ = function() { |
| + return this.options_ && this.options_.includeSource; |
| +} |
| + |
| + |
| JSONProtocolSerializer.prototype.add_ = function(mirror) { |
| // If this mirror is already in the list just return. |
| for (var i = 0; i < this.mirrors_.length; i++) { |
| @@ -1712,7 +1756,7 @@ |
| // 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.isValue() || mirror.isScript() || mirror.isContext())) { |
| this.add_(mirror); |
| return '{"ref":' + mirror.handle() + '}'; |
| } |
| @@ -1721,7 +1765,7 @@ |
| var content = new Array(); |
| // Add the mirror handle. |
| - if (mirror.isValue() || mirror.isScript()) { |
| + if (mirror.isValue() || mirror.isScript() || mirror.isContext()) { |
| content.push(MakeJSONPair_('handle', NumberToJSON_(mirror.handle()))); |
| } |
| @@ -1787,9 +1831,30 @@ |
| NumberToJSON_(mirror.columnOffset()))); |
| content.push(MakeJSONPair_('lineCount', |
| NumberToJSON_(mirror.lineCount()))); |
| + if (mirror.data()) { |
| + content.push(MakeJSONPair_('data', JSON.stringify(mirror.data()))); |
| + } |
| + if (this.includeSource_()) { |
| + content.push(MakeJSONPair_('source', |
| + StringToJSON_(mirror.source()))); |
| + } else { |
| + var sourceStart = mirror.source().substring(0, 80); |
| + content.push(MakeJSONPair_('sourceStart', |
| + StringToJSON_(sourceStart))); |
| + } |
| + content.push(MakeJSONPair_('sourceLength', |
|
yurys
2009/05/06 07:22:34
it seems that you can switch to JSON.stringify for
Søren Thygesen Gjesse
2009/05/06 07:48:54
Sure, that would clean up the code quite a bit.
|
| + NumberToJSON_(mirror.source().length))); |
| content.push(MakeJSONPair_('scriptType', |
| NumberToJSON_(mirror.scriptType()))); |
| + if (mirror.context()) { |
| + content.push(MakeJSONPair_('context', |
| + this.serializeReference(mirror.context()))); |
| + } |
| break; |
| + |
| + case CONTEXT_TYPE: |
| + content.push(MakeJSONPair_('data', JSON.stringify(mirror.data()))); |
| + break; |
| } |
| // Always add the text representation. |