• Leszek Swirski's avatar
    [destructuring] Elide coercible check for simple keys · 1fba0441
    Leszek Swirski authored
    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/+/1773254Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#63453}
    1fba0441
bytecode-generator.cc 238 KB