Read internal properties [[PromiseStatus]] and [[PromiseValue]] of the promise.

BUG=v8:3093
LOG=N
R=aandrey@chromium.org, yangguo@chromium.org

Review URL: https://codereview.chromium.org/273653007

Patch from Alexandra Mikhaylova <amikhaylova@google.com>.

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21266 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
yangguo@chromium.org 2014-05-12 12:42:35 +00:00
parent fbe16b09f2
commit b785aeda44
2 changed files with 30 additions and 1 deletions

View File

@ -798,7 +798,8 @@ ObjectMirror.prototype.toText = function() {
/**
* Return the internal properties of the value, such as [[PrimitiveValue]] of
* scalar wrapper objects and properties of the bound function.
* scalar wrapper objects, properties of the bound function and properties of
* the promise.
* This method is done static to be accessible from Debug API with the bare
* values without mirrors.
* @return {Array} array (possibly empty) of InternalProperty instances
@ -822,6 +823,14 @@ ObjectMirror.GetInternalProperties = function(value) {
result.push(new InternalPropertyMirror("[[BoundArgs]]", boundArgs));
}
return result;
} else if (ObjectIsPromise(value)) {
var mirror = new PromiseMirror(value);
var result = [];
result.push(new InternalPropertyMirror("[[PromiseStatus]]",
mirror.status()));
result.push(new InternalPropertyMirror("[[PromiseValue]]",
mirror.promiseValue()));
return result;
}
return [];
}

View File

@ -67,3 +67,23 @@ var thrownv = new Promise(function(resolve, reject) { throw 'throw' });
testPromiseMirror(resolvedv, "resolved", 'resolve');
testPromiseMirror(rejectedv, "rejected", 'reject');
testPromiseMirror(thrownv, "rejected", 'throw');
// Test internal properties of different promises.
var m1 = debug.MakeMirror(new Promise(
function(resolve, reject) { resolve(1) }));
var ip = m1.internalProperties();
assertEquals(2, ip.length);
assertEquals("[[PromiseStatus]]", ip[0].name());
assertEquals("[[PromiseValue]]", ip[1].name());
assertEquals("resolved", ip[0].value().value());
assertEquals(1, ip[1].value().value());
var m2 = debug.MakeMirror(new Promise(function(resolve, reject) { reject(2) }));
ip = m2.internalProperties();
assertEquals("rejected", ip[0].value().value());
assertEquals(2, ip[1].value().value());
var m3 = debug.MakeMirror(new Promise(function(resolve, reject) { }));
ip = m3.internalProperties();
assertEquals("pending", ip[0].value().value());
assertEquals("undefined", typeof(ip[1].value().value()));