OLD | NEW |
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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 if (IS_UNDEFINED(value)) { | 61 if (IS_UNDEFINED(value)) { |
62 mirror = new UndefinedMirror(); | 62 mirror = new UndefinedMirror(); |
63 } else if (IS_NULL(value)) { | 63 } else if (IS_NULL(value)) { |
64 mirror = new NullMirror(); | 64 mirror = new NullMirror(); |
65 } else if (IS_BOOLEAN(value)) { | 65 } else if (IS_BOOLEAN(value)) { |
66 mirror = new BooleanMirror(value); | 66 mirror = new BooleanMirror(value); |
67 } else if (IS_NUMBER(value)) { | 67 } else if (IS_NUMBER(value)) { |
68 mirror = new NumberMirror(value); | 68 mirror = new NumberMirror(value); |
69 } else if (IS_STRING(value)) { | 69 } else if (IS_STRING(value)) { |
70 mirror = new StringMirror(value); | 70 mirror = new StringMirror(value); |
| 71 } else if (IS_SYMBOL(value)) { |
| 72 mirror = new SymbolMirror(value); |
71 } else if (IS_ARRAY(value)) { | 73 } else if (IS_ARRAY(value)) { |
72 mirror = new ArrayMirror(value); | 74 mirror = new ArrayMirror(value); |
73 } else if (IS_DATE(value)) { | 75 } else if (IS_DATE(value)) { |
74 mirror = new DateMirror(value); | 76 mirror = new DateMirror(value); |
75 } else if (IS_FUNCTION(value)) { | 77 } else if (IS_FUNCTION(value)) { |
76 mirror = new FunctionMirror(value); | 78 mirror = new FunctionMirror(value); |
77 } else if (IS_REGEXP(value)) { | 79 } else if (IS_REGEXP(value)) { |
78 mirror = new RegExpMirror(value); | 80 mirror = new RegExpMirror(value); |
79 } else if (IS_ERROR(value)) { | 81 } else if (IS_ERROR(value)) { |
80 mirror = new ErrorMirror(value); | 82 mirror = new ErrorMirror(value); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 ctor.prototype.constructor = ctor; | 136 ctor.prototype.constructor = ctor; |
135 } | 137 } |
136 | 138 |
137 | 139 |
138 // Type names of the different mirrors. | 140 // Type names of the different mirrors. |
139 var UNDEFINED_TYPE = 'undefined'; | 141 var UNDEFINED_TYPE = 'undefined'; |
140 var NULL_TYPE = 'null'; | 142 var NULL_TYPE = 'null'; |
141 var BOOLEAN_TYPE = 'boolean'; | 143 var BOOLEAN_TYPE = 'boolean'; |
142 var NUMBER_TYPE = 'number'; | 144 var NUMBER_TYPE = 'number'; |
143 var STRING_TYPE = 'string'; | 145 var STRING_TYPE = 'string'; |
| 146 var SYMBOL_TYPE = 'symbol'; |
144 var OBJECT_TYPE = 'object'; | 147 var OBJECT_TYPE = 'object'; |
145 var FUNCTION_TYPE = 'function'; | 148 var FUNCTION_TYPE = 'function'; |
146 var REGEXP_TYPE = 'regexp'; | 149 var REGEXP_TYPE = 'regexp'; |
147 var ERROR_TYPE = 'error'; | 150 var ERROR_TYPE = 'error'; |
148 var PROPERTY_TYPE = 'property'; | 151 var PROPERTY_TYPE = 'property'; |
149 var INTERNAL_PROPERTY_TYPE = 'internalProperty'; | 152 var INTERNAL_PROPERTY_TYPE = 'internalProperty'; |
150 var FRAME_TYPE = 'frame'; | 153 var FRAME_TYPE = 'frame'; |
151 var SCRIPT_TYPE = 'script'; | 154 var SCRIPT_TYPE = 'script'; |
152 var CONTEXT_TYPE = 'context'; | 155 var CONTEXT_TYPE = 'context'; |
153 var SCOPE_TYPE = 'scope'; | 156 var SCOPE_TYPE = 'scope'; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 Block: 5 }; | 194 Block: 5 }; |
192 | 195 |
193 | 196 |
194 // Mirror hierarchy: | 197 // Mirror hierarchy: |
195 // - Mirror | 198 // - Mirror |
196 // - ValueMirror | 199 // - ValueMirror |
197 // - UndefinedMirror | 200 // - UndefinedMirror |
198 // - NullMirror | 201 // - NullMirror |
199 // - NumberMirror | 202 // - NumberMirror |
200 // - StringMirror | 203 // - StringMirror |
| 204 // - SymbolMirror |
201 // - ObjectMirror | 205 // - ObjectMirror |
202 // - FunctionMirror | 206 // - FunctionMirror |
203 // - UnresolvedFunctionMirror | 207 // - UnresolvedFunctionMirror |
204 // - ArrayMirror | 208 // - ArrayMirror |
205 // - DateMirror | 209 // - DateMirror |
206 // - RegExpMirror | 210 // - RegExpMirror |
207 // - ErrorMirror | 211 // - ErrorMirror |
208 // - PromiseMirror | 212 // - PromiseMirror |
209 // - PropertyMirror | 213 // - PropertyMirror |
210 // - InternalPropertyMirror | 214 // - InternalPropertyMirror |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 /** | 279 /** |
276 * Check whether the mirror reflects a string value. | 280 * Check whether the mirror reflects a string value. |
277 * @returns {boolean} True if the mirror reflects a string value | 281 * @returns {boolean} True if the mirror reflects a string value |
278 */ | 282 */ |
279 Mirror.prototype.isString = function() { | 283 Mirror.prototype.isString = function() { |
280 return this instanceof StringMirror; | 284 return this instanceof StringMirror; |
281 }; | 285 }; |
282 | 286 |
283 | 287 |
284 /** | 288 /** |
| 289 * Check whether the mirror reflects a symbol. |
| 290 * @returns {boolean} True if the mirror reflects a symbol |
| 291 */ |
| 292 Mirror.prototype.isSymbol = function() { |
| 293 return this instanceof SymbolMirror; |
| 294 }; |
| 295 |
| 296 |
| 297 /** |
285 * Check whether the mirror reflects an object. | 298 * Check whether the mirror reflects an object. |
286 * @returns {boolean} True if the mirror reflects an object | 299 * @returns {boolean} True if the mirror reflects an object |
287 */ | 300 */ |
288 Mirror.prototype.isObject = function() { | 301 Mirror.prototype.isObject = function() { |
289 return this instanceof ObjectMirror; | 302 return this instanceof ObjectMirror; |
290 }; | 303 }; |
291 | 304 |
292 | 305 |
293 /** | 306 /** |
294 * Check whether the mirror reflects a function. | 307 * Check whether the mirror reflects a function. |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 /** | 472 /** |
460 * Check whether this is a primitive value. | 473 * Check whether this is a primitive value. |
461 * @return {boolean} True if the mirror reflects a primitive value | 474 * @return {boolean} True if the mirror reflects a primitive value |
462 */ | 475 */ |
463 ValueMirror.prototype.isPrimitive = function() { | 476 ValueMirror.prototype.isPrimitive = function() { |
464 var type = this.type(); | 477 var type = this.type(); |
465 return type === 'undefined' || | 478 return type === 'undefined' || |
466 type === 'null' || | 479 type === 'null' || |
467 type === 'boolean' || | 480 type === 'boolean' || |
468 type === 'number' || | 481 type === 'number' || |
469 type === 'string'; | 482 type === 'string' || |
| 483 type === 'symbol'; |
470 }; | 484 }; |
471 | 485 |
472 | 486 |
473 /** | 487 /** |
474 * Get the actual value reflected by this mirror. | 488 * Get the actual value reflected by this mirror. |
475 * @return {value} The value reflected by this mirror | 489 * @return {value} The value reflected by this mirror |
476 */ | 490 */ |
477 ValueMirror.prototype.value = function() { | 491 ValueMirror.prototype.value = function() { |
478 return this.value_; | 492 return this.value_; |
479 }; | 493 }; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 } | 582 } |
569 return this.value_; | 583 return this.value_; |
570 }; | 584 }; |
571 | 585 |
572 StringMirror.prototype.toText = function() { | 586 StringMirror.prototype.toText = function() { |
573 return this.getTruncatedValue(kMaxProtocolStringLength); | 587 return this.getTruncatedValue(kMaxProtocolStringLength); |
574 }; | 588 }; |
575 | 589 |
576 | 590 |
577 /** | 591 /** |
| 592 * Mirror object for a Symbol |
| 593 * @param {Object} value The Symbol |
| 594 * @constructor |
| 595 * @extends Mirror |
| 596 */ |
| 597 function SymbolMirror(value) { |
| 598 %_CallFunction(this, SYMBOL_TYPE, value, ValueMirror); |
| 599 } |
| 600 inherits(SymbolMirror, ValueMirror); |
| 601 |
| 602 |
| 603 SymbolMirror.prototype.description = function() { |
| 604 return %SymbolDescription(%_ValueOf(this.value_)); |
| 605 } |
| 606 |
| 607 |
| 608 SymbolMirror.prototype.toText = function() { |
| 609 return %_CallFunction(this.value_, builtins.SymbolToString); |
| 610 } |
| 611 |
| 612 |
| 613 /** |
578 * Mirror object for objects. | 614 * Mirror object for objects. |
579 * @param {object} value The object reflected by this mirror | 615 * @param {object} value The object reflected by this mirror |
580 * @param {boolean} transient indicate whether this object is transient with a | 616 * @param {boolean} transient indicate whether this object is transient with a |
581 * transient handle | 617 * transient handle |
582 * @constructor | 618 * @constructor |
583 * @extends ValueMirror | 619 * @extends ValueMirror |
584 */ | 620 */ |
585 function ObjectMirror(value, type, transient) { | 621 function ObjectMirror(value, type, transient) { |
586 %_CallFunction(this, type || OBJECT_TYPE, value, transient, ValueMirror); | 622 %_CallFunction(this, type || OBJECT_TYPE, value, transient, ValueMirror); |
587 } | 623 } |
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1177 str = %_CallFunction(this.value_, builtins.ErrorToString); | 1213 str = %_CallFunction(this.value_, builtins.ErrorToString); |
1178 } catch (e) { | 1214 } catch (e) { |
1179 str = '#<Error>'; | 1215 str = '#<Error>'; |
1180 } | 1216 } |
1181 return str; | 1217 return str; |
1182 }; | 1218 }; |
1183 | 1219 |
1184 | 1220 |
1185 /** | 1221 /** |
1186 * Mirror object for a Promise object. | 1222 * Mirror object for a Promise object. |
1187 * @param {Object} data The Promise object | 1223 * @param {Object} value The Promise object |
1188 * @constructor | 1224 * @constructor |
1189 * @extends Mirror | 1225 * @extends ObjectMirror |
1190 */ | 1226 */ |
1191 function PromiseMirror(value) { | 1227 function PromiseMirror(value) { |
1192 %_CallFunction(this, value, PROMISE_TYPE, ObjectMirror); | 1228 %_CallFunction(this, value, PROMISE_TYPE, ObjectMirror); |
1193 } | 1229 } |
1194 inherits(PromiseMirror, ObjectMirror); | 1230 inherits(PromiseMirror, ObjectMirror); |
1195 | 1231 |
1196 | 1232 |
1197 function PromiseGetStatus_(value) { | 1233 function PromiseGetStatus_(value) { |
1198 var status = %DebugGetProperty(value, builtins.promiseStatus); | 1234 var status = %DebugGetProperty(value, builtins.promiseStatus); |
1199 if (status == 0) return "pending"; | 1235 if (status == 0) return "pending"; |
(...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2311 switch (mirror.type()) { | 2347 switch (mirror.type()) { |
2312 case UNDEFINED_TYPE: | 2348 case UNDEFINED_TYPE: |
2313 case NULL_TYPE: | 2349 case NULL_TYPE: |
2314 case BOOLEAN_TYPE: | 2350 case BOOLEAN_TYPE: |
2315 case NUMBER_TYPE: | 2351 case NUMBER_TYPE: |
2316 o.value = mirror.value(); | 2352 o.value = mirror.value(); |
2317 break; | 2353 break; |
2318 case STRING_TYPE: | 2354 case STRING_TYPE: |
2319 o.value = mirror.getTruncatedValue(this.maxStringLength_()); | 2355 o.value = mirror.getTruncatedValue(this.maxStringLength_()); |
2320 break; | 2356 break; |
| 2357 case SYMBOL_TYPE: |
| 2358 o.description = mirror.description(); |
| 2359 break; |
2321 case FUNCTION_TYPE: | 2360 case FUNCTION_TYPE: |
2322 o.name = mirror.name(); | 2361 o.name = mirror.name(); |
2323 o.inferredName = mirror.inferredName(); | 2362 o.inferredName = mirror.inferredName(); |
2324 if (mirror.script()) { | 2363 if (mirror.script()) { |
2325 o.scriptId = mirror.script().id(); | 2364 o.scriptId = mirror.script().id(); |
2326 } | 2365 } |
2327 break; | 2366 break; |
2328 case ERROR_TYPE: | 2367 case ERROR_TYPE: |
2329 case REGEXP_TYPE: | 2368 case REGEXP_TYPE: |
2330 o.value = mirror.toText(); | 2369 o.value = mirror.toText(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2385 var str = mirror.getTruncatedValue(this.maxStringLength_()); | 2424 var str = mirror.getTruncatedValue(this.maxStringLength_()); |
2386 content.value = str; | 2425 content.value = str; |
2387 content.fromIndex = 0; | 2426 content.fromIndex = 0; |
2388 content.toIndex = this.maxStringLength_(); | 2427 content.toIndex = this.maxStringLength_(); |
2389 } else { | 2428 } else { |
2390 content.value = mirror.value(); | 2429 content.value = mirror.value(); |
2391 } | 2430 } |
2392 content.length = mirror.length(); | 2431 content.length = mirror.length(); |
2393 break; | 2432 break; |
2394 | 2433 |
| 2434 case SYMBOL_TYPE: |
| 2435 content.description = mirror.description(); |
| 2436 break; |
| 2437 |
2395 case OBJECT_TYPE: | 2438 case OBJECT_TYPE: |
2396 case FUNCTION_TYPE: | 2439 case FUNCTION_TYPE: |
2397 case ERROR_TYPE: | 2440 case ERROR_TYPE: |
2398 case REGEXP_TYPE: | 2441 case REGEXP_TYPE: |
2399 case PROMISE_TYPE: | 2442 case PROMISE_TYPE: |
2400 // Add object representation. | 2443 // Add object representation. |
2401 this.serializeObject_(mirror, content, details); | 2444 this.serializeObject_(mirror, content, details); |
2402 break; | 2445 break; |
2403 | 2446 |
2404 case PROPERTY_TYPE: | 2447 case PROPERTY_TYPE: |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2735 } | 2778 } |
2736 if (!NUMBER_IS_FINITE(value)) { | 2779 if (!NUMBER_IS_FINITE(value)) { |
2737 if (value > 0) { | 2780 if (value > 0) { |
2738 return 'Infinity'; | 2781 return 'Infinity'; |
2739 } else { | 2782 } else { |
2740 return '-Infinity'; | 2783 return '-Infinity'; |
2741 } | 2784 } |
2742 } | 2785 } |
2743 return value; | 2786 return value; |
2744 } | 2787 } |
OLD | NEW |