[es6] Implement proper TDZ for parameters
authorrossberg <rossberg@chromium.org>
Wed, 5 Aug 2015 12:00:41 +0000 (05:00 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 5 Aug 2015 12:02:23 +0000 (12:02 +0000)
commit4273f66e9882f1239c6b7846c31730d47b870d81
treedd489f78f99dcf954bf18213fb5f188dcfcd7740
parent41fad8dbe01639ff77874139d3ec7429dfac58b7
[es6] Implement proper TDZ for parameters

Previously, examples like (({a = x}, x) => {})({}, 0) did not throw a ReferenceError like they should. This CL

- Splits up DeclareFormalParameters such that the formals can be recorded first and declared later.

- Declaration then takes the complete parameter list into account. If it is not simple, temporaries are introduced for all parameters.

- BuildParameterInitializationBlock desugars all parameters from non-simple lists into let-bindings.

- Refactored Pre/ParserFormalParameters, so that the arity information is no longer duplicated in Parser.

- Rest is currently handled specially, until rest-via-destructuring has landed.

R=adamk@chromium.org, littledan@chromium.org
BUG=v8:811
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#30025}
src/parser.cc
src/parser.h
src/preparser.h
test/mjsunit/harmony/destructuring.js
test/test262-es6/test262-es6.status