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

Side by Side Diff: src/mirror-debugger.js

Issue 398513005: Expose the content of Maps and WeakMaps through MapMirror. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/runtime.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2012 the V8 project authors. All rights reserved. 1 // Copyright 2006-2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Handle id counters. 5 // Handle id counters.
6 var next_handle_ = 0; 6 var next_handle_ = 0;
7 var next_transient_handle_ = -1; 7 var next_transient_handle_ = -1;
8 8
9 // Mirror cache. 9 // Mirror cache.
10 var mirror_cache_ = []; 10 var mirror_cache_ = [];
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 } else if (IS_DATE(value)) { 74 } else if (IS_DATE(value)) {
75 mirror = new DateMirror(value); 75 mirror = new DateMirror(value);
76 } else if (IS_FUNCTION(value)) { 76 } else if (IS_FUNCTION(value)) {
77 mirror = new FunctionMirror(value); 77 mirror = new FunctionMirror(value);
78 } else if (IS_REGEXP(value)) { 78 } else if (IS_REGEXP(value)) {
79 mirror = new RegExpMirror(value); 79 mirror = new RegExpMirror(value);
80 } else if (IS_ERROR(value)) { 80 } else if (IS_ERROR(value)) {
81 mirror = new ErrorMirror(value); 81 mirror = new ErrorMirror(value);
82 } else if (IS_SCRIPT(value)) { 82 } else if (IS_SCRIPT(value)) {
83 mirror = new ScriptMirror(value); 83 mirror = new ScriptMirror(value);
84 } else if (IS_MAP(value) || IS_WEAKMAP(value)) {
85 mirror = new MapMirror(value);
84 } else if (ObjectIsPromise(value)) { 86 } else if (ObjectIsPromise(value)) {
85 mirror = new PromiseMirror(value); 87 mirror = new PromiseMirror(value);
86 } else { 88 } else {
87 mirror = new ObjectMirror(value, OBJECT_TYPE, opt_transient); 89 mirror = new ObjectMirror(value, OBJECT_TYPE, opt_transient);
88 } 90 }
89 91
90 if (mirror_cache_enabled_) mirror_cache_[mirror.handle()] = mirror; 92 if (mirror_cache_enabled_) mirror_cache_[mirror.handle()] = mirror;
91 return mirror; 93 return mirror;
92 } 94 }
93 95
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 var FUNCTION_TYPE = 'function'; 150 var FUNCTION_TYPE = 'function';
149 var REGEXP_TYPE = 'regexp'; 151 var REGEXP_TYPE = 'regexp';
150 var ERROR_TYPE = 'error'; 152 var ERROR_TYPE = 'error';
151 var PROPERTY_TYPE = 'property'; 153 var PROPERTY_TYPE = 'property';
152 var INTERNAL_PROPERTY_TYPE = 'internalProperty'; 154 var INTERNAL_PROPERTY_TYPE = 'internalProperty';
153 var FRAME_TYPE = 'frame'; 155 var FRAME_TYPE = 'frame';
154 var SCRIPT_TYPE = 'script'; 156 var SCRIPT_TYPE = 'script';
155 var CONTEXT_TYPE = 'context'; 157 var CONTEXT_TYPE = 'context';
156 var SCOPE_TYPE = 'scope'; 158 var SCOPE_TYPE = 'scope';
157 var PROMISE_TYPE = 'promise'; 159 var PROMISE_TYPE = 'promise';
160 var MAP_TYPE = 'map';
158 161
159 // Maximum length when sending strings through the JSON protocol. 162 // Maximum length when sending strings through the JSON protocol.
160 var kMaxProtocolStringLength = 80; 163 var kMaxProtocolStringLength = 80;
161 164
162 // Different kind of properties. 165 // Different kind of properties.
163 var PropertyKind = {}; 166 var PropertyKind = {};
164 PropertyKind.Named = 1; 167 PropertyKind.Named = 1;
165 PropertyKind.Indexed = 2; 168 PropertyKind.Indexed = 2;
166 169
167 170
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 // - StringMirror 206 // - StringMirror
204 // - SymbolMirror 207 // - SymbolMirror
205 // - ObjectMirror 208 // - ObjectMirror
206 // - FunctionMirror 209 // - FunctionMirror
207 // - UnresolvedFunctionMirror 210 // - UnresolvedFunctionMirror
208 // - ArrayMirror 211 // - ArrayMirror
209 // - DateMirror 212 // - DateMirror
210 // - RegExpMirror 213 // - RegExpMirror
211 // - ErrorMirror 214 // - ErrorMirror
212 // - PromiseMirror 215 // - PromiseMirror
216 // - MapMirror
213 // - PropertyMirror 217 // - PropertyMirror
214 // - InternalPropertyMirror 218 // - InternalPropertyMirror
215 // - FrameMirror 219 // - FrameMirror
216 // - ScriptMirror 220 // - ScriptMirror
217 221
218 222
219 /** 223 /**
220 * Base class for all mirror objects. 224 * Base class for all mirror objects.
221 * @param {string} type The type of the mirror 225 * @param {string} type The type of the mirror
222 * @constructor 226 * @constructor
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 /** 418 /**
415 * Check whether the mirror reflects a scope. 419 * Check whether the mirror reflects a scope.
416 * @returns {boolean} True if the mirror reflects a scope 420 * @returns {boolean} True if the mirror reflects a scope
417 */ 421 */
418 Mirror.prototype.isScope = function() { 422 Mirror.prototype.isScope = function() {
419 return this instanceof ScopeMirror; 423 return this instanceof ScopeMirror;
420 }; 424 };
421 425
422 426
423 /** 427 /**
428 * Check whether the mirror reflects a map.
429 * @returns {boolean} True if the mirror reflects a map
430 */
431 Mirror.prototype.isMap = function() {
432 return this instanceof MapMirror;
433 };
434
435
436 /**
424 * Allocate a handle id for this object. 437 * Allocate a handle id for this object.
425 */ 438 */
426 Mirror.prototype.allocateHandle_ = function() { 439 Mirror.prototype.allocateHandle_ = function() {
427 if (mirror_cache_enabled_) this.handle_ = next_handle_++; 440 if (mirror_cache_enabled_) this.handle_ = next_handle_++;
428 }; 441 };
429 442
430 443
431 /** 444 /**
432 * Allocate a transient handle id for this object. Transient handles are 445 * Allocate a transient handle id for this object. Transient handles are
433 * negative. 446 * negative.
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 PromiseMirror.prototype.status = function() { 1259 PromiseMirror.prototype.status = function() {
1247 return PromiseGetStatus_(this.value_); 1260 return PromiseGetStatus_(this.value_);
1248 }; 1261 };
1249 1262
1250 1263
1251 PromiseMirror.prototype.promiseValue = function() { 1264 PromiseMirror.prototype.promiseValue = function() {
1252 return MakeMirror(PromiseGetValue_(this.value_)); 1265 return MakeMirror(PromiseGetValue_(this.value_));
1253 }; 1266 };
1254 1267
1255 1268
1269 function MapMirror(value) {
1270 %_CallFunction(this, value, MAP_TYPE, ObjectMirror);
1271 }
1272 inherits(MapMirror, ObjectMirror);
1273
1274
1275 /**
1276 * Returns an array of key/value pairs of a map.
1277 * This will keep keys alive for WeakMaps.
1278 *
1279 * @returns {Array.<Object>} Array of key/value pairs of a map.
1280 */
1281 MapMirror.prototype.entries = function() {
1282 var result = [];
1283
1284 if (IS_WEAKMAP(this.value_)) {
1285 var entries = %GetWeakMapEntries(this.value_);
1286 for (var i = 0; i < entries.length; i += 2) {
1287 result.push({
1288 key: entries[i],
1289 value: entries[i + 1]
1290 });
1291 }
1292 return result;
1293 }
1294
1295 var iter = %_CallFunction(this.value_, builtins.MapEntries);
1296 var next;
1297 while (!(next = iter.next()).done) {
1298 result.push({
1299 key: next.value[0],
1300 value: next.value[1]
1301 });
1302 }
1303 return result;
1304 };
1305
1306
1256 /** 1307 /**
1257 * Base mirror object for properties. 1308 * Base mirror object for properties.
1258 * @param {ObjectMirror} mirror The mirror object having this property 1309 * @param {ObjectMirror} mirror The mirror object having this property
1259 * @param {string} name The name of the property 1310 * @param {string} name The name of the property
1260 * @param {Array} details Details about the property 1311 * @param {Array} details Details about the property
1261 * @constructor 1312 * @constructor
1262 * @extends Mirror 1313 * @extends Mirror
1263 */ 1314 */
1264 function PropertyMirror(mirror, name, details) { 1315 function PropertyMirror(mirror, name, details) {
1265 %_CallFunction(this, PROPERTY_TYPE, Mirror); 1316 %_CallFunction(this, PROPERTY_TYPE, Mirror);
(...skipping 1512 matching lines...) Expand 10 before | Expand all | Expand 10 after
2778 } 2829 }
2779 if (!NUMBER_IS_FINITE(value)) { 2830 if (!NUMBER_IS_FINITE(value)) {
2780 if (value > 0) { 2831 if (value > 0) {
2781 return 'Infinity'; 2832 return 'Infinity';
2782 } else { 2833 } else {
2783 return '-Infinity'; 2834 return '-Infinity';
2784 } 2835 }
2785 } 2836 }
2786 return value; 2837 return value;
2787 } 2838 }
OLDNEW
« no previous file with comments | « no previous file | src/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698