• caitpotter88's avatar
    [es6] refactor Promise resolution · 24ff30b7
    caitpotter88 authored
    Several changes are included here:
    
    1. Each resolution callback references shared data indicating whether
    it has already been resolved or not, as described in 25.4.1.3
    http://tc39.github.io/ecma262/#sec-createresolvingfunctions.
    Previously this was handled exclusively by the Promise's status,
    which does not work correctly with the current chaining behaviour.
    
    2. During fulfillment, When a Promise is resolved with a thenable, the
    spec chains the promises together by invoking the thenable's `then`
    function with the original Promise's resolve and reject methods (per
    section 25.4.2.2, or
    http://tc39.github.io/ecma262/#sec-promiseresolvethenablejob, on the
    next tick, regardless of whether or not there are pending tasks.
    
    3. Adds a spec compliance fix to ensure that the Promise constructor
    is only loaded once when `then()` is called, solving v8:4539 as well.
    This involves refactoring PromiseChain to accept a constructor
    argument. PromiseChain/PromiseDeferred will hopefully be removed soon,
    simplifying the process.
    
    BUG=v8:4162, v8:4539, v8:3237
    LOG=N
    R=rossberg@chromium.org, littledan@chromium.org, adamk@chromium.org
    
    Review URL: https://codereview.chromium.org/1394463003
    
    Cr-Commit-Position: refs/heads/master@{#32046}
    24ff30b7
Name
Last commit
Last update
..
debug-promises Loading commit data...
regress Loading commit data...
arguments-iterator.js Loading commit data...
array-copywithin.js Loading commit data...
array-fill.js Loading commit data...
array-find.js Loading commit data...
array-findindex.js Loading commit data...
array-from.js Loading commit data...
array-iterator.js Loading commit data...
array-length.js Loading commit data...
array-of.js Loading commit data...
array-reverse-order.js Loading commit data...
array-tostring.js Loading commit data...
arrow-functions-lexical-arguments.js Loading commit data...
arrow-functions-this.js Loading commit data...
arrow-functions.js Loading commit data...
block-conflicts.js Loading commit data...
block-const-assign.js Loading commit data...
block-early-errors.js Loading commit data...
block-for.js Loading commit data...
block-leave.js Loading commit data...
block-let-crankshaft.js Loading commit data...
block-let-declaration.js Loading commit data...
block-let-semantics.js Loading commit data...
block-non-strict-errors.js Loading commit data...
block-scoping-top-level.js Loading commit data...
block-scoping.js Loading commit data...
built-in-accessor-names.js Loading commit data...
class-computed-property-names-super.js Loading commit data...
class-property-name-eval-arguments.js Loading commit data...
classes-experimental.js Loading commit data...
classes-lazy-parsing.js Loading commit data...
classes-maps.js Loading commit data...
classes-subclass-arrays.js Loading commit data...
classes-subclass-builtins.js Loading commit data...
classes.js Loading commit data...
collection-iterator.js Loading commit data...
collections.js Loading commit data...
computed-property-names-classes.js Loading commit data...
computed-property-names-deopt.js Loading commit data...
computed-property-names-object-literals-methods.js Loading commit data...
computed-property-names-super.js Loading commit data...
computed-property-names.js Loading commit data...
debug-blockscopes.js Loading commit data...
debug-break-default-constructor.js Loading commit data...
debug-evaluate-blockscopes.js Loading commit data...
debug-function-scopes.js Loading commit data...
debug-step-into-class-extends.js Loading commit data...
debug-step-into-constructor.js Loading commit data...
debug-stepin-collections-foreach.js Loading commit data...
debug-stepin-generators.js Loading commit data...
debug-stepin-microtasks.js Loading commit data...
debug-stepnext-for.js Loading commit data...
empty-for.js Loading commit data...
for-of.js Loading commit data...
function-length-configurable.js Loading commit data...
function-name-configurable.js Loading commit data...
function-prototype-name.js Loading commit data...
generators-debug-liveedit.js Loading commit data...
generators-debug-scopes.js Loading commit data...
generators-iteration.js Loading commit data...
generators-mirror.js Loading commit data...
generators-objects.js Loading commit data...
generators-parsing.js Loading commit data...
generators-poisoned-properties.js Loading commit data...
generators-relocation.js Loading commit data...
generators-runtime.js Loading commit data...
generators-states.js Loading commit data...
indexed-integer-exotics.js Loading commit data...
iteration-semantics.js Loading commit data...
iteration-syntax.js Loading commit data...
iterator-prototype.js Loading commit data...
json.js Loading commit data...
map-minus-zero.js Loading commit data...
math-cbrt.js Loading commit data...
math-clz32.js Loading commit data...
math-expm1.js Loading commit data...
math-fround.js Loading commit data...
math-hyperbolic.js Loading commit data...
math-hypot.js Loading commit data...
math-log1p.js Loading commit data...
math-log2-log10.js Loading commit data...
math-sign.js Loading commit data...
math-trunc.js Loading commit data...
math.js Loading commit data...
method-name-eval-arguments.js Loading commit data...
microtask-delivery.js Loading commit data...
mirror-collections.js Loading commit data...
mirror-iterators.js Loading commit data...
mirror-promises.js Loading commit data...
mirror-symbols.js Loading commit data...
new-target.js Loading commit data...
numeric-literals.js Loading commit data...
object-assign.js Loading commit data...
object-literals-method.js Loading commit data...
object-literals-property-shorthand.js Loading commit data...
object-literals-super.js Loading commit data...
object-tostring.js Loading commit data...
promise-internal-setter.js Loading commit data...
promises.js Loading commit data...
prototype-ordinary-objects.js Loading commit data...
regexp-flags.js Loading commit data...
regexp-match-lastindex.js Loading commit data...
regexp-prototype.js Loading commit data...
regexp-replace-lastindex.js Loading commit data...
regexp-tolength.js Loading commit data...
set-minus-zero.js Loading commit data...
spread-array.js Loading commit data...
spread-call-new-class.js Loading commit data...
spread-call-new.js Loading commit data...
spread-call-super-property.js Loading commit data...
spread-call.js Loading commit data...
string-codepointat.js Loading commit data...
string-endswith.js Loading commit data...
string-fromcodepoint.js Loading commit data...
string-html.js Loading commit data...
string-includes.js Loading commit data...
string-iterator.js Loading commit data...
string-raw.js Loading commit data...
string-repeat.js Loading commit data...
string-startswith.js Loading commit data...
super.js Loading commit data...
symbols.js Loading commit data...
templates.js Loading commit data...
throw-type-error-function-restrictions.js Loading commit data...
typed-array-iterator.js Loading commit data...
typedarray-copywithin.js Loading commit data...
typedarray-every.js Loading commit data...
typedarray-fill.js Loading commit data...
typedarray-find.js Loading commit data...
typedarray-findindex.js Loading commit data...
typedarray-foreach.js Loading commit data...
typedarray-from.js Loading commit data...
typedarray-indexing.js Loading commit data...
typedarray-iteration.js Loading commit data...
typedarray-of.js Loading commit data...
typedarray-proto.js Loading commit data...
typedarray-reduce.js Loading commit data...
typedarray-reverse.js Loading commit data...
typedarray-set-length.js Loading commit data...
typedarray-slice.js Loading commit data...
typedarray-sort.js Loading commit data...
typedarray-tostring.js Loading commit data...
typedarray.js Loading commit data...
unicode-escapes.js Loading commit data...
unscopables.js Loading commit data...