[parser] Fix variable caching for conflict lookup
During conflict lookup (for lexical variables and sloppy block function hoisting), we cache the looked-up variable on the current scope if the lookup goes through a ScopeInfo. However, for variable lookup during scope analysis, we use the "entry point" as the cache. Since both lookups can create Variables, this can cause us to create duplicate variables, e.g. a duplicate function name variable in the attached test. Instead, for ScopeInfo conflict lookups we can cache the result on the function's outer scope, which shoud be equivalent to the entry point. As a (necessary) drive-by, we can terminate the lookup early if we find a VAR with the same name, as we can safely assume that its existence means that it doesn't conflict, which means that our variable can't conflict either. Bug: chromium:1026603 Change-Id: I19f80f65597ba6573ebe0b48aa5698f55e5c3ea1 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1928861 Commit-Queue: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#65138}
Showing
Please
register
or
sign in
to comment