• Leszek Swirski's avatar
    [parser] Don't desugar destructuring declarations. · 5e725a2b
    Leszek Swirski authored
    Emit a single destructuring assignment for destructuring declarations,
    which can be desugared by the bytecode generator. This allows us to
    remove destructuring desugaring from the parser (specifically, the
    pattern rewriter) entirely.
    
    The pattern "rewriter" is now only responsible for walking the
    destructuring pattern to declare variables, mark them assigned, and
    potentially rewrite scopes for the edge case of parameters with a sloppy
    eval.
    
    Note that since the rewriter is no longer rewriting, we have to flip the
    VariableProxy copying logic for var re-lookup, so that we now pass the
    new VariableProxy to the variable declaration and leave the original
    unresolved (rather than passing the original through and rewriting to a
    new unresolved VariableProxy).
    
    This change does have some effect on breakpoint locations, due to some
    of the available information changing between the parser and bytecode
    generator, however the new locations appear to be more consistent
    between assignments and declarations.
    
    Change-Id: I3a58dd0a387d2bfb8e5e9e22dde0acc5f440cb82
    Reviewed-on: https://chromium-review.googlesource.com/c/1382462
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
    Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
    Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
    Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58670}
    5e725a2b
bytecode-generator.h 19.5 KB