• Toon Verwaest's avatar
    [parser] Replacing ExpressionClassifier with ExpressionScope that knows what it's tracking · d1b4e31b
    Toon Verwaest authored
    Since it's explicit what we're tracking, we can immediately throw errors in
    certain cases, and ignore irrelevant errors. We don't need to use the
    classifier itself to track "let let", since we know whether we're parsing a
    "let". Errors that were previously (almost) always accumulated are now
    immediately pushed to the scopes that care (parameter initialization errors).
    
    This CL drops avoiding allocation of classified errors, at least for now, but
    that doesn't affect performance anymore since we don't aggressively blacklist
    anymore. Classified errors are even less likely with the more precise approach.
    
    ParseAssignmentExpression doesn't introduce its own scope immediately, but
    reuses the outer scope.
    
    Rather than using full ExpressionClassifiers + Accumulate to separate
    expressions/patterns from each other while keeping track of the overall error
    state, this now uses an explicit AccumulationScope.
    
    When we parse (async) arrow functions we introduce new scopes
    that track that they may be (async) arrow functions.
    
    We track StrictModeFormal parameters in 2 different ways if it isn't
    immediately certain that it is a strict-mode formal error: Either directly on
    the (Pre)ParserFormalParameters, or on the NextArrowFunctionInfo in the case
    we're not yet certain that we'll have an arrow function. In the latter case we
    don't have a FormalParameter object yet, and we'll copy it over once we know
    we're parsing an arrow function. The latter works because it's not allowed to
    change strictness of a function with non-simple parameters.
    
    Design doc:
    https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M/
    
    Change-Id: If4ecd717c9780095c7ddc859c8945b3d7d268a9d
    Reviewed-on: https://chromium-review.googlesource.com/c/1367809
    Commit-Queue: Toon Verwaest <verwaest@chromium.org>
    Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
    Reviewed-by: 's avatarMarja Hölttä <marja@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58307}
    d1b4e31b
Name
Last commit
Last update
..
benchmarks Loading commit data...
cctest Loading commit data...
common Loading commit data...
debugger Loading commit data...
fuzzer Loading commit data...
inspector Loading commit data...
intl Loading commit data...
js-perf-test Loading commit data...
memory Loading commit data...
message Loading commit data...
mjsunit Loading commit data...
mkgrokdump Loading commit data...
mozilla Loading commit data...
preparser Loading commit data...
test262 Loading commit data...
torque Loading commit data...
unittests Loading commit data...
wasm-js Loading commit data...
wasm-spec-tests Loading commit data...
webkit Loading commit data...
BUILD.gn Loading commit data...