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

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

Issue 257803005: Expose promise status through promise mirror. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments Created 6 years, 7 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/promise.js » ('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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 24 matching lines...) Expand all
35 35
36 /** 36 /**
37 * Clear the mirror handle cache. 37 * Clear the mirror handle cache.
38 */ 38 */
39 function ClearMirrorCache() { 39 function ClearMirrorCache() {
40 next_handle_ = 0; 40 next_handle_ = 0;
41 mirror_cache_ = []; 41 mirror_cache_ = [];
42 } 42 }
43 43
44 44
45 // Wrapper to check whether an object is a Promise. The call may not work
46 // if promises are not enabled.
47 // TODO(yangguo): remove this wrapper once promises are enabled by default.
48 function ObjectIsPromise(value) {
49 try {
50 return %IsPromise(value);
51 } catch (e) {
52 return false;
53 }
54 }
55
56
45 /** 57 /**
46 * Returns the mirror for a specified value or object. 58 * Returns the mirror for a specified value or object.
47 * 59 *
48 * @param {value or Object} value the value or object to retreive the mirror for 60 * @param {value or Object} value the value or object to retreive the mirror for
49 * @param {boolean} transient indicate whether this object is transient and 61 * @param {boolean} transient indicate whether this object is transient and
50 * should not be added to the mirror cache. The default is not transient. 62 * should not be added to the mirror cache. The default is not transient.
51 * @returns {Mirror} the mirror reflects the passed value or object 63 * @returns {Mirror} the mirror reflects the passed value or object
52 */ 64 */
53 function MakeMirror(value, opt_transient) { 65 function MakeMirror(value, opt_transient) {
54 var mirror; 66 var mirror;
(...skipping 28 matching lines...) Expand all
83 } else if (IS_DATE(value)) { 95 } else if (IS_DATE(value)) {
84 mirror = new DateMirror(value); 96 mirror = new DateMirror(value);
85 } else if (IS_FUNCTION(value)) { 97 } else if (IS_FUNCTION(value)) {
86 mirror = new FunctionMirror(value); 98 mirror = new FunctionMirror(value);
87 } else if (IS_REGEXP(value)) { 99 } else if (IS_REGEXP(value)) {
88 mirror = new RegExpMirror(value); 100 mirror = new RegExpMirror(value);
89 } else if (IS_ERROR(value)) { 101 } else if (IS_ERROR(value)) {
90 mirror = new ErrorMirror(value); 102 mirror = new ErrorMirror(value);
91 } else if (IS_SCRIPT(value)) { 103 } else if (IS_SCRIPT(value)) {
92 mirror = new ScriptMirror(value); 104 mirror = new ScriptMirror(value);
105 } else if (ObjectIsPromise(value)) {
106 mirror = new PromiseMirror(value);
93 } else { 107 } else {
94 mirror = new ObjectMirror(value, OBJECT_TYPE, opt_transient); 108 mirror = new ObjectMirror(value, OBJECT_TYPE, opt_transient);
95 } 109 }
96 110
97 mirror_cache_[mirror.handle()] = mirror; 111 mirror_cache_[mirror.handle()] = mirror;
98 return mirror; 112 return mirror;
99 } 113 }
100 114
101 115
102 /** 116 /**
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 var OBJECT_TYPE = 'object'; 166 var OBJECT_TYPE = 'object';
153 var FUNCTION_TYPE = 'function'; 167 var FUNCTION_TYPE = 'function';
154 var REGEXP_TYPE = 'regexp'; 168 var REGEXP_TYPE = 'regexp';
155 var ERROR_TYPE = 'error'; 169 var ERROR_TYPE = 'error';
156 var PROPERTY_TYPE = 'property'; 170 var PROPERTY_TYPE = 'property';
157 var INTERNAL_PROPERTY_TYPE = 'internalProperty'; 171 var INTERNAL_PROPERTY_TYPE = 'internalProperty';
158 var FRAME_TYPE = 'frame'; 172 var FRAME_TYPE = 'frame';
159 var SCRIPT_TYPE = 'script'; 173 var SCRIPT_TYPE = 'script';
160 var CONTEXT_TYPE = 'context'; 174 var CONTEXT_TYPE = 'context';
161 var SCOPE_TYPE = 'scope'; 175 var SCOPE_TYPE = 'scope';
176 var PROMISE_TYPE = 'promise';
162 177
163 // Maximum length when sending strings through the JSON protocol. 178 // Maximum length when sending strings through the JSON protocol.
164 var kMaxProtocolStringLength = 80; 179 var kMaxProtocolStringLength = 80;
165 180
166 // Different kind of properties. 181 // Different kind of properties.
167 var PropertyKind = {}; 182 var PropertyKind = {};
168 PropertyKind.Named = 1; 183 PropertyKind.Named = 1;
169 PropertyKind.Indexed = 2; 184 PropertyKind.Indexed = 2;
170 185
171 186
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 // - NullMirror 220 // - NullMirror
206 // - NumberMirror 221 // - NumberMirror
207 // - StringMirror 222 // - StringMirror
208 // - ObjectMirror 223 // - ObjectMirror
209 // - FunctionMirror 224 // - FunctionMirror
210 // - UnresolvedFunctionMirror 225 // - UnresolvedFunctionMirror
211 // - ArrayMirror 226 // - ArrayMirror
212 // - DateMirror 227 // - DateMirror
213 // - RegExpMirror 228 // - RegExpMirror
214 // - ErrorMirror 229 // - ErrorMirror
230 // - PromiseMirror
215 // - PropertyMirror 231 // - PropertyMirror
216 // - InternalPropertyMirror 232 // - InternalPropertyMirror
217 // - FrameMirror 233 // - FrameMirror
218 // - ScriptMirror 234 // - ScriptMirror
219 235
220 236
221 /** 237 /**
222 * Base class for all mirror objects. 238 * Base class for all mirror objects.
223 * @param {string} type The type of the mirror 239 * @param {string} type The type of the mirror
224 * @constructor 240 * @constructor
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 /** 360 /**
345 * Check whether the mirror reflects an error. 361 * Check whether the mirror reflects an error.
346 * @returns {boolean} True if the mirror reflects an error 362 * @returns {boolean} True if the mirror reflects an error
347 */ 363 */
348 Mirror.prototype.isError = function() { 364 Mirror.prototype.isError = function() {
349 return this instanceof ErrorMirror; 365 return this instanceof ErrorMirror;
350 }; 366 };
351 367
352 368
353 /** 369 /**
370 * Check whether the mirror reflects a promise.
371 * @returns {boolean} True if the mirror reflects a promise
372 */
373 Mirror.prototype.isPromise = function() {
374 return this instanceof PromiseMirror;
375 };
376
377
378 /**
354 * Check whether the mirror reflects a property. 379 * Check whether the mirror reflects a property.
355 * @returns {boolean} True if the mirror reflects a property 380 * @returns {boolean} True if the mirror reflects a property
356 */ 381 */
357 Mirror.prototype.isProperty = function() { 382 Mirror.prototype.isProperty = function() {
358 return this instanceof PropertyMirror; 383 return this instanceof PropertyMirror;
359 }; 384 };
360 385
361 386
362 /** 387 /**
363 * Check whether the mirror reflects an internal property. 388 * Check whether the mirror reflects an internal property.
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 ObjectMirror.prototype.propertyNames = function(kind, limit) { 655 ObjectMirror.prototype.propertyNames = function(kind, limit) {
631 // Find kind and limit and allocate array for the result 656 // Find kind and limit and allocate array for the result
632 kind = kind || PropertyKind.Named | PropertyKind.Indexed; 657 kind = kind || PropertyKind.Named | PropertyKind.Indexed;
633 658
634 var propertyNames; 659 var propertyNames;
635 var elementNames; 660 var elementNames;
636 var total = 0; 661 var total = 0;
637 662
638 // Find all the named properties. 663 // Find all the named properties.
639 if (kind & PropertyKind.Named) { 664 if (kind & PropertyKind.Named) {
640 // Get all the local property names. 665 // Get all the local property names except for private symbols.
641 propertyNames = 666 propertyNames =
642 %GetLocalPropertyNames(this.value_, PROPERTY_ATTRIBUTES_NONE); 667 %GetLocalPropertyNames(this.value_, PROPERTY_ATTRIBUTES_PRIVATE_SYMBOL);
643 total += propertyNames.length; 668 total += propertyNames.length;
644 669
645 // Get names for named interceptor properties if any. 670 // Get names for named interceptor properties if any.
646 if (this.hasNamedInterceptor() && (kind & PropertyKind.Named)) { 671 if (this.hasNamedInterceptor() && (kind & PropertyKind.Named)) {
647 var namedInterceptorNames = 672 var namedInterceptorNames =
648 %GetNamedInterceptorPropertyNames(this.value_); 673 %GetNamedInterceptorPropertyNames(this.value_);
649 if (namedInterceptorNames) { 674 if (namedInterceptorNames) {
650 propertyNames = propertyNames.concat(namedInterceptorNames); 675 propertyNames = propertyNames.concat(namedInterceptorNames);
651 total += namedInterceptorNames.length; 676 total += namedInterceptorNames.length;
652 } 677 }
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 try { 1190 try {
1166 str = %_CallFunction(this.value_, builtins.ErrorToString); 1191 str = %_CallFunction(this.value_, builtins.ErrorToString);
1167 } catch (e) { 1192 } catch (e) {
1168 str = '#<Error>'; 1193 str = '#<Error>';
1169 } 1194 }
1170 return str; 1195 return str;
1171 }; 1196 };
1172 1197
1173 1198
1174 /** 1199 /**
1200 * Mirror object for a Promise object.
1201 * @param {Object} data The Promise object
1202 * @constructor
1203 * @extends Mirror
1204 */
1205 function PromiseMirror(value) {
1206 %_CallFunction(this, value, PROMISE_TYPE, ObjectMirror);
1207 }
1208 inherits(PromiseMirror, ObjectMirror);
1209
1210
1211 PromiseMirror.prototype.status = function() {
1212 var status = %GetPromiseStatus(this.value_);
1213 if (status == 0) return "pending";
1214 if (status == 1) return "resolved";
1215 return "rejected";
1216 };
1217
1218
1219 /**
1175 * Base mirror object for properties. 1220 * Base mirror object for properties.
1176 * @param {ObjectMirror} mirror The mirror object having this property 1221 * @param {ObjectMirror} mirror The mirror object having this property
1177 * @param {string} name The name of the property 1222 * @param {string} name The name of the property
1178 * @param {Array} details Details about the property 1223 * @param {Array} details Details about the property
1179 * @constructor 1224 * @constructor
1180 * @extends Mirror 1225 * @extends Mirror
1181 */ 1226 */
1182 function PropertyMirror(mirror, name, details) { 1227 function PropertyMirror(mirror, name, details) {
1183 %_CallFunction(this, PROPERTY_TYPE, Mirror); 1228 %_CallFunction(this, PROPERTY_TYPE, Mirror);
1184 this.mirror_ = mirror; 1229 this.mirror_ = mirror;
(...skipping 1158 matching lines...) Expand 10 before | Expand all | Expand 10 after
2343 } else { 2388 } else {
2344 content.value = mirror.value(); 2389 content.value = mirror.value();
2345 } 2390 }
2346 content.length = mirror.length(); 2391 content.length = mirror.length();
2347 break; 2392 break;
2348 2393
2349 case OBJECT_TYPE: 2394 case OBJECT_TYPE:
2350 case FUNCTION_TYPE: 2395 case FUNCTION_TYPE:
2351 case ERROR_TYPE: 2396 case ERROR_TYPE:
2352 case REGEXP_TYPE: 2397 case REGEXP_TYPE:
2398 case PROMISE_TYPE:
2353 // Add object representation. 2399 // Add object representation.
2354 this.serializeObject_(mirror, content, details); 2400 this.serializeObject_(mirror, content, details);
2355 break; 2401 break;
2356 2402
2357 case PROPERTY_TYPE: 2403 case PROPERTY_TYPE:
2358 case INTERNAL_PROPERTY_TYPE: 2404 case INTERNAL_PROPERTY_TYPE:
2359 throw new Error('PropertyMirror cannot be serialized independently'); 2405 throw new Error('PropertyMirror cannot be serialized independently');
2360 break; 2406 break;
2361 2407
2362 case FRAME_TYPE: 2408 case FRAME_TYPE:
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2445 content.prototypeObject = this.serializeReference(mirror.prototypeObject()); 2491 content.prototypeObject = this.serializeReference(mirror.prototypeObject());
2446 2492
2447 // Add flags to indicate whether there are interceptors. 2493 // Add flags to indicate whether there are interceptors.
2448 if (mirror.hasNamedInterceptor()) { 2494 if (mirror.hasNamedInterceptor()) {
2449 content.namedInterceptor = true; 2495 content.namedInterceptor = true;
2450 } 2496 }
2451 if (mirror.hasIndexedInterceptor()) { 2497 if (mirror.hasIndexedInterceptor()) {
2452 content.indexedInterceptor = true; 2498 content.indexedInterceptor = true;
2453 } 2499 }
2454 2500
2455 // Add function specific properties.
2456 if (mirror.isFunction()) { 2501 if (mirror.isFunction()) {
2457 // Add function specific properties. 2502 // Add function specific properties.
2458 content.name = mirror.name(); 2503 content.name = mirror.name();
2459 if (!IS_UNDEFINED(mirror.inferredName())) { 2504 if (!IS_UNDEFINED(mirror.inferredName())) {
2460 content.inferredName = mirror.inferredName(); 2505 content.inferredName = mirror.inferredName();
2461 } 2506 }
2462 content.resolved = mirror.resolved(); 2507 content.resolved = mirror.resolved();
2463 if (mirror.resolved()) { 2508 if (mirror.resolved()) {
2464 content.source = mirror.source(); 2509 content.source = mirror.source();
2465 } 2510 }
2466 if (mirror.script()) { 2511 if (mirror.script()) {
2467 content.script = this.serializeReference(mirror.script()); 2512 content.script = this.serializeReference(mirror.script());
2468 content.scriptId = mirror.script().id(); 2513 content.scriptId = mirror.script().id();
2469 2514
2470 serializeLocationFields(mirror.sourceLocation(), content); 2515 serializeLocationFields(mirror.sourceLocation(), content);
2471 } 2516 }
2472 2517
2473 content.scopes = []; 2518 content.scopes = [];
2474 for (var i = 0; i < mirror.scopeCount(); i++) { 2519 for (var i = 0; i < mirror.scopeCount(); i++) {
2475 var scope = mirror.scope(i); 2520 var scope = mirror.scope(i);
2476 content.scopes.push({ 2521 content.scopes.push({
2477 type: scope.scopeType(), 2522 type: scope.scopeType(),
2478 index: i 2523 index: i
2479 }); 2524 });
2480 } 2525 }
2481 } 2526 }
2482 2527
2483 // Add date specific properties.
2484 if (mirror.isDate()) { 2528 if (mirror.isDate()) {
2485 // Add date specific properties. 2529 // Add date specific properties.
2486 content.value = mirror.value(); 2530 content.value = mirror.value();
2487 } 2531 }
2488 2532
2533 if (mirror.isPromise()) {
2534 // Add promise specific properties.
2535 content.status = mirror.status();
2536 }
2537
2489 // Add actual properties - named properties followed by indexed properties. 2538 // Add actual properties - named properties followed by indexed properties.
2490 var propertyNames = mirror.propertyNames(PropertyKind.Named); 2539 var propertyNames = mirror.propertyNames(PropertyKind.Named);
2491 var propertyIndexes = mirror.propertyNames(PropertyKind.Indexed); 2540 var propertyIndexes = mirror.propertyNames(PropertyKind.Indexed);
2492 var p = new Array(propertyNames.length + propertyIndexes.length); 2541 var p = new Array(propertyNames.length + propertyIndexes.length);
2493 for (var i = 0; i < propertyNames.length; i++) { 2542 for (var i = 0; i < propertyNames.length; i++) {
2494 var propertyMirror = mirror.property(propertyNames[i]); 2543 var propertyMirror = mirror.property(propertyNames[i]);
2495 p[i] = this.serializeProperty_(propertyMirror); 2544 p[i] = this.serializeProperty_(propertyMirror);
2496 if (details) { 2545 if (details) {
2497 this.add_(propertyMirror.value()); 2546 this.add_(propertyMirror.value());
2498 } 2547 }
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
2684 } 2733 }
2685 if (!NUMBER_IS_FINITE(value)) { 2734 if (!NUMBER_IS_FINITE(value)) {
2686 if (value > 0) { 2735 if (value > 0) {
2687 return 'Infinity'; 2736 return 'Infinity';
2688 } else { 2737 } else {
2689 return '-Infinity'; 2738 return '-Infinity';
2690 } 2739 }
2691 } 2740 }
2692 return value; 2741 return value;
2693 } 2742 }
OLDNEW
« no previous file with comments | « no previous file | src/promise.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698