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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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)) { | 84 } else if (IS_MAP(value) || IS_WEAKMAP(value)) { |
85 mirror = new MapMirror(value); | 85 mirror = new MapMirror(value); |
86 } else if (IS_SET(value) || IS_WEAKSET(value)) { | 86 } else if (IS_SET(value) || IS_WEAKSET(value)) { |
87 mirror = new SetMirror(value); | 87 mirror = new SetMirror(value); |
88 } else if (ObjectIsPromise(value)) { | 88 } else if (ObjectIsPromise(value)) { |
89 mirror = new PromiseMirror(value); | 89 mirror = new PromiseMirror(value); |
90 } else if (IS_GENERATOR(value)) { | |
91 mirror = new GeneratorMirror(value); | |
90 } else { | 92 } else { |
91 mirror = new ObjectMirror(value, OBJECT_TYPE, opt_transient); | 93 mirror = new ObjectMirror(value, OBJECT_TYPE, opt_transient); |
92 } | 94 } |
93 | 95 |
94 if (mirror_cache_enabled_) mirror_cache_[mirror.handle()] = mirror; | 96 if (mirror_cache_enabled_) mirror_cache_[mirror.handle()] = mirror; |
95 return mirror; | 97 return mirror; |
96 } | 98 } |
97 | 99 |
98 | 100 |
99 /** | 101 /** |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 var ERROR_TYPE = 'error'; | 156 var ERROR_TYPE = 'error'; |
155 var PROPERTY_TYPE = 'property'; | 157 var PROPERTY_TYPE = 'property'; |
156 var INTERNAL_PROPERTY_TYPE = 'internalProperty'; | 158 var INTERNAL_PROPERTY_TYPE = 'internalProperty'; |
157 var FRAME_TYPE = 'frame'; | 159 var FRAME_TYPE = 'frame'; |
158 var SCRIPT_TYPE = 'script'; | 160 var SCRIPT_TYPE = 'script'; |
159 var CONTEXT_TYPE = 'context'; | 161 var CONTEXT_TYPE = 'context'; |
160 var SCOPE_TYPE = 'scope'; | 162 var SCOPE_TYPE = 'scope'; |
161 var PROMISE_TYPE = 'promise'; | 163 var PROMISE_TYPE = 'promise'; |
162 var MAP_TYPE = 'map'; | 164 var MAP_TYPE = 'map'; |
163 var SET_TYPE = 'set'; | 165 var SET_TYPE = 'set'; |
166 var GENERATOR_TYPE = 'generator'; | |
164 | 167 |
165 // Maximum length when sending strings through the JSON protocol. | 168 // Maximum length when sending strings through the JSON protocol. |
166 var kMaxProtocolStringLength = 80; | 169 var kMaxProtocolStringLength = 80; |
167 | 170 |
168 // Different kind of properties. | 171 // Different kind of properties. |
169 var PropertyKind = {}; | 172 var PropertyKind = {}; |
170 PropertyKind.Named = 1; | 173 PropertyKind.Named = 1; |
171 PropertyKind.Indexed = 2; | 174 PropertyKind.Indexed = 2; |
172 | 175 |
173 | 176 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
207 // - ObjectMirror | 210 // - ObjectMirror |
208 // - FunctionMirror | 211 // - FunctionMirror |
209 // - UnresolvedFunctionMirror | 212 // - UnresolvedFunctionMirror |
210 // - ArrayMirror | 213 // - ArrayMirror |
211 // - DateMirror | 214 // - DateMirror |
212 // - RegExpMirror | 215 // - RegExpMirror |
213 // - ErrorMirror | 216 // - ErrorMirror |
214 // - PromiseMirror | 217 // - PromiseMirror |
215 // - MapMirror | 218 // - MapMirror |
216 // - SetMirror | 219 // - SetMirror |
220 // - GeneratorMirror | |
217 // - PropertyMirror | 221 // - PropertyMirror |
218 // - InternalPropertyMirror | 222 // - InternalPropertyMirror |
219 // - FrameMirror | 223 // - FrameMirror |
220 // - ScriptMirror | 224 // - ScriptMirror |
221 | 225 |
222 | 226 |
223 /** | 227 /** |
224 * Base class for all mirror objects. | 228 * Base class for all mirror objects. |
225 * @param {string} type The type of the mirror | 229 * @param {string} type The type of the mirror |
226 * @constructor | 230 * @constructor |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
364 /** | 368 /** |
365 * Check whether the mirror reflects a promise. | 369 * Check whether the mirror reflects a promise. |
366 * @returns {boolean} True if the mirror reflects a promise | 370 * @returns {boolean} True if the mirror reflects a promise |
367 */ | 371 */ |
368 Mirror.prototype.isPromise = function() { | 372 Mirror.prototype.isPromise = function() { |
369 return this instanceof PromiseMirror; | 373 return this instanceof PromiseMirror; |
370 }; | 374 }; |
371 | 375 |
372 | 376 |
373 /** | 377 /** |
378 * Check whether the mirror reflects a generator object. | |
379 * @returns {boolean} True if the mirror reflects a generator object | |
380 */ | |
381 Mirror.prototype.isGenerator = function() { | |
382 return this instanceof GeneratorMirror; | |
383 }; | |
384 | |
385 | |
386 /** | |
374 * Check whether the mirror reflects a property. | 387 * Check whether the mirror reflects a property. |
375 * @returns {boolean} True if the mirror reflects a property | 388 * @returns {boolean} True if the mirror reflects a property |
376 */ | 389 */ |
377 Mirror.prototype.isProperty = function() { | 390 Mirror.prototype.isProperty = function() { |
378 return this instanceof PropertyMirror; | 391 return this instanceof PropertyMirror; |
379 }; | 392 }; |
380 | 393 |
381 | 394 |
382 /** | 395 /** |
383 * Check whether the mirror reflects an internal property. | 396 * Check whether the mirror reflects an internal property. |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
979 } | 992 } |
980 }; | 993 }; |
981 | 994 |
982 | 995 |
983 /** | 996 /** |
984 * Returns the script source position for the function. Only makes sense | 997 * Returns the script source position for the function. Only makes sense |
985 * for functions which has a script defined. | 998 * for functions which has a script defined. |
986 * @return {Number or undefined} in-script position for the function | 999 * @return {Number or undefined} in-script position for the function |
987 */ | 1000 */ |
988 FunctionMirror.prototype.sourcePosition_ = function() { | 1001 FunctionMirror.prototype.sourcePosition_ = function() { |
989 // Return script if function is resolved. Otherwise just fall through | 1002 // Return position if function is resolved. Otherwise just fall |
990 // to return undefined. | 1003 // through to return undefined. |
991 if (this.resolved()) { | 1004 if (this.resolved()) { |
992 return %FunctionGetScriptSourcePosition(this.value_); | 1005 return %FunctionGetScriptSourcePosition(this.value_); |
993 } | 1006 } |
994 }; | 1007 }; |
995 | 1008 |
996 | 1009 |
997 /** | 1010 /** |
998 * Returns the script source location object for the function. Only makes sense | 1011 * Returns the script source location object for the function. Only makes sense |
999 * for functions which has a script defined. | 1012 * for functions which has a script defined. |
1000 * @return {Location or undefined} in-script location for the function begin | 1013 * @return {Location or undefined} in-script location for the function begin |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1345 var iter = %_CallFunction(this.value_, builtins.SetValues); | 1358 var iter = %_CallFunction(this.value_, builtins.SetValues); |
1346 var next; | 1359 var next; |
1347 while (!(next = iter.next()).done) { | 1360 while (!(next = iter.next()).done) { |
1348 result.push(next.value); | 1361 result.push(next.value); |
1349 } | 1362 } |
1350 return result; | 1363 return result; |
1351 }; | 1364 }; |
1352 | 1365 |
1353 | 1366 |
1354 /** | 1367 /** |
1368 * Mirror object for a Generator object. | |
1369 * @param {Object} data The Generator object | |
1370 * @constructor | |
1371 * @extends Mirror | |
1372 */ | |
1373 function GeneratorMirror(value) { | |
1374 %_CallFunction(this, value, GENERATOR_TYPE, ObjectMirror); | |
1375 } | |
1376 inherits(GeneratorMirror, ObjectMirror); | |
1377 | |
1378 | |
1379 GeneratorMirror.prototype.status = function() { | |
1380 var continuation = %GeneratorGetContinuation(this.value_); | |
1381 if (continuation < 0) return "running"; | |
aandrey
2014/09/17 13:21:29
is it possible to test this status?
wingo
2014/09/17 13:54:30
Done.
| |
1382 if (continuation == 0) return "closed"; | |
1383 return "suspended"; | |
1384 }; | |
1385 | |
1386 | |
1387 GeneratorMirror.prototype.sourcePosition_ = function() { | |
1388 return %GeneratorGetSourcePosition(this.value_); | |
1389 }; | |
1390 | |
1391 | |
1392 GeneratorMirror.prototype.sourceLocation = function() { | |
1393 var pos = this.sourcePosition_(); | |
1394 if (!IS_UNDEFINED(pos)) { | |
1395 var script = this.func().script(); | |
1396 if (script) { | |
1397 return script.locationFromPosition(pos, true); | |
1398 } | |
1399 } | |
1400 }; | |
1401 | |
1402 | |
1403 GeneratorMirror.prototype.func = function() { | |
1404 if (!this.func_) { | |
1405 this.func_ = MakeMirror(%GeneratorGetFunction(this.value_)); | |
1406 } | |
1407 return this.func_; | |
1408 }; | |
1409 | |
1410 | |
1411 GeneratorMirror.prototype.context = function() { | |
aandrey
2014/09/17 13:21:30
Is this the same as this.func().script().context()
wingo
2014/09/17 13:54:30
Hum, I realized that it isn't -- it's one of the o
| |
1412 if (!this.context_) { | |
1413 this.context_ = new ContextMirror(%GeneratorGetContext(this.value_)); | |
1414 } | |
1415 return this.context_; | |
1416 }; | |
1417 | |
1418 | |
1419 GeneratorMirror.prototype.receiver = function() { | |
1420 if (!this.receiver_) { | |
1421 this.receiver_ = MakeMirror(%GeneratorGetReceiver(this.value_)); | |
1422 } | |
1423 return this.receiver_; | |
1424 }; | |
1425 | |
1426 | |
1427 /** | |
1355 * Base mirror object for properties. | 1428 * Base mirror object for properties. |
1356 * @param {ObjectMirror} mirror The mirror object having this property | 1429 * @param {ObjectMirror} mirror The mirror object having this property |
1357 * @param {string} name The name of the property | 1430 * @param {string} name The name of the property |
1358 * @param {Array} details Details about the property | 1431 * @param {Array} details Details about the property |
1359 * @constructor | 1432 * @constructor |
1360 * @extends Mirror | 1433 * @extends Mirror |
1361 */ | 1434 */ |
1362 function PropertyMirror(mirror, name, details) { | 1435 function PropertyMirror(mirror, name, details) { |
1363 %_CallFunction(this, PROPERTY_TYPE, Mirror); | 1436 %_CallFunction(this, PROPERTY_TYPE, Mirror); |
1364 this.mirror_ = mirror; | 1437 this.mirror_ = mirror; |
(...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2532 | 2605 |
2533 case SYMBOL_TYPE: | 2606 case SYMBOL_TYPE: |
2534 content.description = mirror.description(); | 2607 content.description = mirror.description(); |
2535 break; | 2608 break; |
2536 | 2609 |
2537 case OBJECT_TYPE: | 2610 case OBJECT_TYPE: |
2538 case FUNCTION_TYPE: | 2611 case FUNCTION_TYPE: |
2539 case ERROR_TYPE: | 2612 case ERROR_TYPE: |
2540 case REGEXP_TYPE: | 2613 case REGEXP_TYPE: |
2541 case PROMISE_TYPE: | 2614 case PROMISE_TYPE: |
2615 case GENERATOR_TYPE: | |
2542 // Add object representation. | 2616 // Add object representation. |
2543 this.serializeObject_(mirror, content, details); | 2617 this.serializeObject_(mirror, content, details); |
2544 break; | 2618 break; |
2545 | 2619 |
2546 case PROPERTY_TYPE: | 2620 case PROPERTY_TYPE: |
2547 case INTERNAL_PROPERTY_TYPE: | 2621 case INTERNAL_PROPERTY_TYPE: |
2548 throw new Error('PropertyMirror cannot be serialized independently'); | 2622 throw new Error('PropertyMirror cannot be serialized independently'); |
2549 break; | 2623 break; |
2550 | 2624 |
2551 case FRAME_TYPE: | 2625 case FRAME_TYPE: |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2877 } | 2951 } |
2878 if (!NUMBER_IS_FINITE(value)) { | 2952 if (!NUMBER_IS_FINITE(value)) { |
2879 if (value > 0) { | 2953 if (value > 0) { |
2880 return 'Infinity'; | 2954 return 'Infinity'; |
2881 } else { | 2955 } else { |
2882 return '-Infinity'; | 2956 return '-Infinity'; |
2883 } | 2957 } |
2884 } | 2958 } |
2885 return value; | 2959 return value; |
2886 } | 2960 } |
OLD | NEW |