v8/test/mjsunit/es8
Toon Verwaest d1b4e31bc5 [parser] Replacing ExpressionClassifier with ExpressionScope that knows what it's tracking
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: Adam Klein <adamk@chromium.org>
Reviewed-by: Marja Hölttä <marja@chromium.org>
Cr-Commit-Position: refs/heads/master@{#58307}
2018-12-18 08:32:30 +00:00
..
regress [builtins] abort FrameFunctionIterator::next if frame summary empty 2017-12-20 00:08:35 +00:00
async-arrow-default-function-await.js [parser] Replacing ExpressionClassifier with ExpressionScope that knows what it's tracking 2018-12-18 08:32:30 +00:00
async-arrow-lexical-arguments.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-arrow-lexical-new.target.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-arrow-lexical-super.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-arrow-lexical-this.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-await-basic.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-await-interleaved.js Reland ^3 "[async] Expose async hooks to d8" 2018-07-04 15:47:16 +00:00
async-await-no-constructor.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-await-resolve-new.js Remove --harmony-async-await runtime flag 2017-01-10 23:27:02 +00:00
async-await-species.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-destructuring.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
async-function-stacktrace.js Remove --harmony-async-await runtime flag 2017-01-10 23:27:02 +00:00
async-function-try-finally.js Replace %RunMicrotasks with %PerformMicrotaskCheckpoint 2018-12-06 11:10:18 +00:00
object-entries.js Fix Object.entries/.values with non-enumerable properties 2018-04-25 13:44:32 +00:00
object-get-own-property-descriptors.js Remove --harmony-* flags for new Object static methods 2016-10-31 22:53:35 +00:00
object-values.js [elements] Rename FAST elements kinds 2017-06-30 13:31:44 +00:00
sloppy-no-duplicate-async.js Remove --harmony-async-await runtime flag 2017-01-10 23:27:02 +00:00