• adamk's avatar
    [es6] Implement destructuring binding in try/catch · a316db99
    adamk authored
    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}
    a316db99
try-catch-lexical-conflict.out 144 Bytes