[destructuring] Grand for statement parsing unification.
authordslomov <dslomov@chromium.org>
Thu, 21 May 2015 17:47:07 +0000 (10:47 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 21 May 2015 17:46:45 +0000 (17:46 +0000)
commit7ffdb5194d51a5813f9474d2453859c376223b18
treeb8fa189be7ef89e05601b1efcc155417e8775489
parenta40e85d668919a2afab69355e1d3bad6bbfbaaf0
[destructuring] Grand for statement parsing unification.

Also support patterns in ``for (var p in/of ...)``

This CL extends the rewriting we used to do for ``for (let p in/of...)`` to
``for (var p in/of ...)``. For all for..in/of loop declaring variable,
we rewrite
   for (var/let/const pattern in/of e) b
into
   for (x' in/of e) { var/let/const pattern = e; b }

This adds a small complication for debugger: for a statement
   for (var v in/of e) ...
we used to have
   var v;
   for (v in/of e) ...
and there was a separate breakpoint on ``var v`` line.
This breakpoint is actually useless since it is immediately followed by
a breakpoint on evaluation of ``e``, so this CL removes that breakpoint
location.

Similiraly, for let, it used to be that
  for (let v in/of e) ...
became
  for (x' in/of e) { let v; v  = x'; ... }
``let v``generetaed a useless breakpoint (with the location at the
loop's head. This CL removes that breakpoint as well.

R=arv@chromium.org,rossberg@chromium.org
BUG=v8:811
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#28565}
src/parser.cc
src/parser.h
src/pattern-rewriter.cc
test/cctest/test-parsing.cc
test/mjsunit/es6/debug-stepnext-for.js
test/mjsunit/harmony/destructuring.js