From da0ca2afc2cf7d41c5bfa049224fd0ef5439756b Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Mon, 28 Apr 2014 08:33:23 +0000 Subject: [PATCH] Expose promise value through promise mirror. R=rossberg@chromium.org, yurys@chromium.org BUG=v8:3093 LOG=Y Review URL: https://codereview.chromium.org/258823012 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@21003 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mirror-debugger.js | 6 ++++++ test/mjsunit/es6/mirror-promises.js | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/mirror-debugger.js b/src/mirror-debugger.js index 9cde02b..26ed909 100644 --- a/src/mirror-debugger.js +++ b/src/mirror-debugger.js @@ -1216,6 +1216,11 @@ PromiseMirror.prototype.status = function() { }; +PromiseMirror.prototype.promiseValue = function() { + return %GetPromiseValue(this.value_); +}; + + /** * Base mirror object for properties. * @param {ObjectMirror} mirror The mirror object having this property @@ -2533,6 +2538,7 @@ JSONProtocolSerializer.prototype.serializeObject_ = function(mirror, content, if (mirror.isPromise()) { // Add promise specific properties. content.status = mirror.status(); + content.promiseValue = mirror.promiseValue(); } // Add actual properties - named properties followed by indexed properties. diff --git a/test/mjsunit/es6/mirror-promises.js b/test/mjsunit/es6/mirror-promises.js index c0eb5bf..5a21a6b 100644 --- a/test/mjsunit/es6/mirror-promises.js +++ b/test/mjsunit/es6/mirror-promises.js @@ -17,7 +17,7 @@ MirrorRefCache.prototype.lookup = function(handle) { return this.refs_[handle]; } -function testPromiseMirror(promise, status) { +function testPromiseMirror(promise, status, value) { // Create mirror and JSON representation. var mirror = debug.MakeMirror(promise); var serializer = debug.MakeMirrorSerializer(); @@ -39,6 +39,7 @@ function testPromiseMirror(promise, status) { assertEquals("Object", mirror.className()); assertEquals("#", mirror.toText()); assertSame(promise, mirror.value()); + assertEquals(value, mirror.promiseValue()); // Parse JSON representation and check. var fromJSON = eval('(' + json + ')'); @@ -47,7 +48,7 @@ function testPromiseMirror(promise, status) { assertEquals('function', refs.lookup(fromJSON.constructorFunction.ref).type); assertEquals('Promise', refs.lookup(fromJSON.constructorFunction.ref).name); assertEquals(status, fromJSON.status); - + assertEquals(value, fromJSON.promiseValue); } // Test a number of different promises. @@ -55,6 +56,14 @@ var resolved = new Promise(function(resolve, reject) { resolve() }); var rejected = new Promise(function(resolve, reject) { reject() }); var pending = new Promise(function(resolve, reject) {}); -testPromiseMirror(resolved, "resolved"); -testPromiseMirror(rejected, "rejected"); -testPromiseMirror(pending, "pending"); +testPromiseMirror(resolved, "resolved", undefined); +testPromiseMirror(rejected, "rejected", undefined); +testPromiseMirror(pending, "pending", undefined); + +var resolvedv = new Promise(function(resolve, reject) { resolve('resolve') }); +var rejectedv = new Promise(function(resolve, reject) { reject('reject') }); +var thrownv = new Promise(function(resolve, reject) { throw 'throw' }); + +testPromiseMirror(resolvedv, "resolved", 'resolve'); +testPromiseMirror(rejectedv, "rejected", 'reject'); +testPromiseMirror(thrownv, "rejected", 'throw'); -- 2.7.4