1fba044154
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} |
||
---|---|---|
.. | ||
bytecode_expectations | ||
bytecode-expectations-printer.cc | ||
bytecode-expectations-printer.h | ||
generate-bytecode-expectations.cc | ||
interpreter-tester.cc | ||
interpreter-tester.h | ||
source-position-matcher.cc | ||
source-position-matcher.h | ||
test-bytecode-generator.cc | ||
test-interpreter-intrinsics.cc | ||
test-interpreter.cc | ||
test-source-positions.cc |