• Toon Verwaest's avatar
    [parser] Disambiguate variables through expression-scope · f9529f6b
    Toon Verwaest authored
    Previously we'd always push variable proxies into the unresolved list of the
    current scope, and possibly delete them from the list later in case they end up
    being declarations. If variables become assigned, there were two ways to mark
    them as such: The preparser would marked the variables tracked on the
    PreParserExpression, and the parser would traverse the LHS AST to find and mark
    all variables.
    
    After this CL, if the scope already knows it's tracking declarations, the
    variables are never added to the unresolved list in the first place. If the
    scope is ambigous, it tracks the variable proxies on the side and only adds
    them to the unresolved list if they end up being references rather than
    declarations. The same list is now used to bulk mark all LHS variables as
    assigned; uniformely for both the parser and the preparser.
    
    In a next step we'll also use the scope to create declarations. That way we can
    stop tracking variables_ on PreParserExpression altogether.
    
    Change-Id: I6ada37006cc2e066731f29cd4ea314550fc7959f
    Reviewed-on: https://chromium-review.googlesource.com/c/1397669
    Commit-Queue: Toon Verwaest <verwaest@chromium.org>
    Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58629}
    f9529f6b
scopes.h 42.8 KB