[es6] Make sure we do not invoke setter when calling Promise.all

We were calling the setter for Object.prototype.promise if it existed
when calling PromiseAll.

BUG=v9:4232
LOG=N
R=rossberg@chromium.org, adamk@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#29357}
This commit is contained in:
arv 2015-06-29 11:14:29 -07:00 committed by Commit bot
parent ba08cc8c15
commit 473badf5fa
2 changed files with 19 additions and 2 deletions

View File

@ -189,11 +189,11 @@ function PromiseDeferred() {
reject: function(r) { PromiseReject(promise, r) }
};
} else {
var result = {};
var result = {promise: UNDEFINED, reject: UNDEFINED, resolve: UNDEFINED};
result.promise = new this(function(resolve, reject) {
result.resolve = resolve;
result.reject = reject;
})
});
return result;
}
}

View File

@ -0,0 +1,17 @@
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
Object.defineProperties(Object.prototype, {
promise: {set: assertUnreachable},
reject: {set: assertUnreachable},
resolve: {set: assertUnreachable},
});
class P extends Promise {}
P.all([Promise.resolve('ok')]);
P.race([Promise.resolve('ok')]);
P.defer();