• rossberg's avatar
    [es6] Implement proper TDZ for parameters · 4273f66e
    rossberg authored
    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}
    4273f66e
preparser.h 145 KB