• Toon Verwaest's avatar
    [parser] Handle 'this' with a special ThisExpression rather than VariableProxy · 3f2b5017
    Toon Verwaest authored
    "this" is a very common expression. By using a single ThisExpression object
    we can both avoid allocating many unnecessary VariableProxies and specialize
    the resolution of this since we know where it's declared up-front. This also
    avoids having to special-case "this" reference handling in the paths that would
    behave differently for "this" than for regular references; e.g., with-scopes.
    
    The tricky pieces are due to DebugEvaluate and this/super() used as default
    parameters of arrow functions. In the former case we replace the WITH_SCOPE
    with FUNCTION_SCOPE so that we make sure that "this" is intercepted, and still
    rely on regular dynamic variable lookup. Arrow functions are dealt with by
    marking "this" use in ArrowHeadParsingScopes. If the parenthesized expression
    ends up being an arrow function, we force context allocate on the outer scope
    (and mark "has_this_reference" on the FUNCTION_SCOPE so DebugEvaluate in the
    arrow function can expose "this").
    
    The CL also removes the now unused ThisFunction AST node.
    
    Change-Id: I0ca38ab92ff58c2f731e07db2fbe91df901681ef
    Reviewed-on: https://chromium-review.googlesource.com/c/1448313Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
    Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
    Commit-Queue: Toon Verwaest <verwaest@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#59393}
    3f2b5017
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...