7459d8cecb
Testing the promise status is not enough to ensure that resolve functions are called only once. This change adds a similar version of the [[AlreadyResolved]] slot to the Promise.all resolve element function, and also ensures that [[AlreadyResolved]] is respected in the Promise executor, and when resolving thenables. This means replacing PromiseReject() shortcuts with promiseCapability.reject(), which has an [[AlreadyResolved]] record in a context slot. Also ensures that changes to the list accumulator in Promise.all() is not observable via accessors installed in the Array prototype chain, using the same mechanism used in several Array methods. Fixes the following Test262 tests: - built-ins/Promise/all/call-resolve-element-items.js - built-ins/Promise/all/call-resolve-element.js - built-ins/Promise/all/call-resolve-element-after-return.js - built-ins/Promise/all/same-reject-function.js - built-ins/Promise/all/resolve-from-same-thenable.js - built-ins/Promise/all/resolve-before-loop-exit.js - built-ins/Promise/all/resolve-before-loop-exit-from-same.js - built-ins/Promise/exception-after-resolve-in-executor.js - built-ins/Promise/exception-after-resolve-in-thenable-job.js - built-ins/Promise/all/does-not-invoke-array-setters.js BUG=v8:4633 LOG=N R=littledan@chromium.org, cbruni@chromium.org Review URL: https://codereview.chromium.org/1534813005 Cr-Commit-Position: refs/heads/master@{#33163} |
||
---|---|---|
.. | ||
harness-adapt.js | ||
README | ||
test262.gyp | ||
test262.isolate | ||
test262.status | ||
testcfg.py |
This directory contains code for binding the test262 test suite into the v8 test harness. The tests are checked out as a dependency from https://chromium.googlesource.com/external/github.com/tc39/test262 at a revision specified in the DEPS file as 'data' in this directory. They are fetched with 'gclient sync'. To update to a newer version, please change the DEPS file. Using a newer version, e.g. 'deadbeef' may be possible but the tests are only known to pass (and indeed run) with the DEPS revision. Example: cd data git fetch git checkout deadbeef If you do update to a newer revision you may have to change the test harness adapter code since it uses internal functionality from the harness that comes bundled with the tests. You will most likely also have to update the test expectation file.