• Leszek Swirski's avatar
    Reland "[destructuring] Elide coercible check for simple keys" · ef2df57a
    Leszek Swirski authored
    This is a reland of 1fba0441
    Chromium expectation tests have been disabled, and will be enabled
    
    Original change's description:
    > [destructuring] Elide coercible check for simple keys
    >
    > Simple object destructuring, such as `let {a,b} = o`, is less efficient
    > than the equivalent assignments `let a = o.a; let b = o.b`. This is
    > because it does a nil check of `o` before the assignments. However, this
    > nil check is not strictly necessary for simple (i.e. non-computed) names,
    > as there will be an equivalent nil check on the first access to o in
    > `o.a`. For computed names the computation is unfortunately obervable.
    >
    > So, we can elide the nil check when the first property (if any) of the
    > destructuring target is a non-computed name. This messes a bit with our
    > error messages, so we re-use the CallPrinter to also find destructuring
    > assignment based errors, and fiddle with the error message there. As
    > a side-effect, we also get out the object name in the AST, so we can
    > output a slightly nicer error message.
    >
    > Change-Id: Iafa858e27ed771a146cd3ba57903cc73bb46951d
    > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1773254
    > Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    > Reviewed-by: Toon Verwaest <verwaest@chromium.org>
    > Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    > Cr-Commit-Position: refs/heads/master@{#63453}
    
    TBR=verwaest@chromium.org
    
    Bug: chromium:999473
    Change-Id: Ib0b2e4be433c50521ba1722e1c06b672bfefa405
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1777702Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#63477}
    ef2df57a
Name
Last commit
Last update
..
OWNERS Loading commit data...
runtime-array.cc Loading commit data...
runtime-atomics.cc Loading commit data...
runtime-bigint.cc Loading commit data...
runtime-classes.cc Loading commit data...
runtime-collections.cc Loading commit data...
runtime-compiler.cc Loading commit data...
runtime-date.cc Loading commit data...
runtime-debug.cc Loading commit data...
runtime-forin.cc Loading commit data...
runtime-function.cc Loading commit data...
runtime-futex.cc Loading commit data...
runtime-generator.cc Loading commit data...
runtime-internal.cc Loading commit data...
runtime-interpreter.cc Loading commit data...
runtime-intl.cc Loading commit data...
runtime-literals.cc Loading commit data...
runtime-module.cc Loading commit data...
runtime-numbers.cc Loading commit data...
runtime-object.cc Loading commit data...
runtime-operators.cc Loading commit data...
runtime-promise.cc Loading commit data...
runtime-proxy.cc Loading commit data...
runtime-regexp.cc Loading commit data...
runtime-scopes.cc Loading commit data...
runtime-strings.cc Loading commit data...
runtime-symbol.cc Loading commit data...
runtime-test.cc Loading commit data...
runtime-typedarray.cc Loading commit data...
runtime-utils.h Loading commit data...
runtime-wasm.cc Loading commit data...
runtime.cc Loading commit data...
runtime.h Loading commit data...