[es6] Implement destructuring binding in try/catch

The approach is to desugar

  try { ... }
  catch ({x, y}) { ... }

into

  try { ... }
  catch (.catch) {
    let x = .catch.x;
    let y = .catch.y;
    ...
  }

using the PatternRewriter's normal facilities. This has the side benefit
of throwing the appropriate variable conflict errors for declarations
made inside the catch block.

No change is made to non-destructured cases, which will hopefully save
us some work if https://github.com/tc39/ecma262/issues/150 is adopted
in the spec.

There's one big problem with this patch, which is a lack of PreParser
support for the redeclaration errors. But it seems we're already lacking
good PreParser support for such errors, so I'm not sure that should
block this moving forward.

BUG=v8:811
LOG=y

Review URL: https://codereview.chromium.org/1417483014

Cr-Commit-Position: refs/heads/master@{#31797}
9 files changed
tree: 1f3ffd1856300533b21d226888749c26c3b2e502
  1. .clang-format
  2. .gitignore
  3. .ycm_extra_conf.py
  4. AUTHORS
  5. BUILD.gn
  6. ChangeLog
  7. DEPS
  8. LICENSE
  9. LICENSE.strongtalk
  10. LICENSE.v8
  11. LICENSE.valgrind
  12. Makefile
  13. Makefile.android
  14. Makefile.nacl
  15. OWNERS
  16. PRESUBMIT.py
  17. README.md
  18. WATCHLISTS
  19. benchmarks/
  20. build/
  21. codereview.settings
  22. docs/
  23. include/
  24. infra/
  25. samples/
  26. snapshot_toolchain.gni
  27. src/
  28. test/
  29. testing/
  30. third_party/
  31. tools/
README.md

V8 JavaScript Engine

V8 is Google's open source JavaScript engine.

V8 implements ECMAScript as specified in ECMA-262.

V8 is written in C++ and is used in Google Chrome, the open source browser from Google.

V8 can run standalone, or can be embedded into any C++ application.

V8 Project page: https://code.google.com/p/v8/

Getting the Code

Checkout depot tools, and run

    fetch v8

This will checkout V8 into the directory v8 and fetch all of its dependencies. To stay up to date, run

    git pull origin
    gclient sync

For fetching all branches, add the following into your remote configuration in .git/config:

    fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
    fetch = +refs/tags/*:refs/tags/*

Contributing

Please follow the instructions mentioned on the V8 wiki.