Commit dcbab0f5 authored by stefan.penner's avatar stefan.penner Committed by Commit bot

[es6] Align Promise.resolve with the spec

* Promise.resolve is now works with subclasses
* Spec removed [[PromiseConstructor]] now can simply use constructor
* Promise.resolve ignores species

R=littledan@chromium.org,domenic@chromium.org
BUG=v8:4161,v8:4341
LOG=Y

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

Cr-Commit-Position: refs/heads/master@{#31116}
parent 7e113c47
......@@ -285,8 +285,11 @@ function PromiseThen(onResolve, onReject) {
// Combinators.
function PromiseCast(x) {
// TODO(rossberg): cannot do better until we support @@create.
return IsPromise(x) ? x : new this(function(resolve) { resolve(x) });
if (IsPromise(x) && x.constructor === this) {
return x;
} else {
return new this(function(resolve) { resolve(x) });
}
}
function PromiseAll(iterable) {
......
......@@ -1011,9 +1011,9 @@ function assertAsyncDone(iteration) {
log = ""
var p4 = MyPromise.resolve(4)
var p5 = MyPromise.reject(5)
assertTrue(p4 instanceof Promise, "subclass/instance4")
assertTrue(p4 instanceof MyPromise, "subclass/instance4")
assertTrue(p4 instanceof MyPromise, "subclass/instance-my4")
assertTrue(p5 instanceof Promise, "subclass/instance5")
assertTrue(p5 instanceof MyPromise, "subclass/instance5")
assertTrue(p5 instanceof MyPromise, "subclass/instance-my5")
d3.resolve(3)
assertTrue(log === "nx4nr5x3", "subclass/resolve")
......@@ -1028,12 +1028,35 @@ function assertAsyncDone(iteration) {
log = ""
Promise.all([11, Promise.accept(12), 13, MyPromise.accept(14), 15, 16])
assertTrue(log === "nx14n", "subclass/all/arg")
assertTrue(log === "nx14", "subclass/all/arg")
log = ""
MyPromise.all([21, Promise.accept(22), 23, MyPromise.accept(24), 25, 26])
assertTrue(log === "nx24nnx21nnx23nnnx25nnx26n", "subclass/all/self")
assertTrue(log === "nx24nnx21nnnnx23nnnx25nnx26n", "subclass/all/self")
})();
(function() {
'use strict';
class Pact extends Promise { }
class Vow extends Pact { }
class Oath extends Vow { }
Oath.constructor = Vow;
assertTrue(Pact.resolve(Pact.resolve()).constructor === Pact,
"subclass/resolve/own");
assertTrue(Pact.resolve(Promise.resolve()).constructor === Pact,
"subclass/resolve/ancestor");
assertTrue(Pact.resolve(Vow.resolve()).constructor === Pact,
"subclass/resolve/descendant"); var vow = Vow.resolve();
vow.constructor = Oath;
assertTrue(Oath.resolve(vow) === vow,
"subclass/resolve/descendant with transplanted own constructor");
}());
assertAsyncDone()
......@@ -288,9 +288,6 @@
'built-ins/Promise/race/S25.4.4.3_A3.1_T2': [FAIL],
'built-ins/Promise/reject/S25.4.4.4_A3.1_T1': [FAIL],
# https://code.google.com/p/v8/issues/detail?id=4341
'built-ins/Promise/resolve/arg-uniq-ctor': [FAIL],
# https://code.google.com/p/v8/issues/detail?id=4119
'built-ins/RegExp/15.10.4.1-1': [FAIL],
'built-ins/RegExp/S15.10.3.1_A2_T1': [FAIL],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment