| Index: src/preparser.h
|
| diff --git a/src/preparser.h b/src/preparser.h
|
| index 0440d831eea5105552c2c268534faead9ff44f0e..2e6e9ddf31b5a12c30ef5e8e15d44b4bcf397151 100644
|
| --- a/src/preparser.h
|
| +++ b/src/preparser.h
|
| @@ -238,6 +238,14 @@ class ParserBase : public Traits {
|
|
|
| typename Traits::Type::Factory* factory() { return factory_; }
|
|
|
| + void set_consecutive_class_declaration_batch_start(int position) {
|
| + consecutive_class_declaration_batch_start_ = position;
|
| + }
|
| +
|
| + int consecutive_class_declaration_batch_start() const {
|
| + return consecutive_class_declaration_batch_start_;
|
| + }
|
| +
|
| private:
|
| // Used to assign an index to each literal that needs materialization in
|
| // the function. Includes regexp literals, and boilerplate for object and
|
| @@ -267,6 +275,9 @@ class ParserBase : public Traits {
|
| Scope** scope_stack_;
|
| Scope* outer_scope_;
|
| typename Traits::Type::Factory* factory_;
|
| + // For tracking which classes are declared consecutively. Needed for strong
|
| + // mode.
|
| + int consecutive_class_declaration_batch_start_;
|
|
|
| friend class ParserTraits;
|
| friend class Checkpoint;
|
| @@ -1632,6 +1643,7 @@ class PreParser : public ParserBase<PreParserTraits> {
|
| &factory);
|
| bool ok = true;
|
| int start_position = scanner()->peek_location().beg_pos;
|
| + top_scope.set_consecutive_class_declaration_batch_start(start_position);
|
| ParseStatementList(Token::EOS, &ok);
|
| if (stack_overflow()) return kPreParseStackOverflow;
|
| if (!ok) {
|
| @@ -1784,7 +1796,8 @@ ParserBase<Traits>::FunctionState::FunctionState(
|
| outer_function_state_(*function_state_stack),
|
| scope_stack_(scope_stack),
|
| outer_scope_(*scope_stack),
|
| - factory_(factory) {
|
| + factory_(factory),
|
| + consecutive_class_declaration_batch_start_(scope->start_position()) {
|
| *scope_stack_ = scope;
|
| *function_state_stack = this;
|
| }
|
| @@ -3092,6 +3105,8 @@ ParserBase<Traits>::ParseArrowFunctionLiteral(int start_pos,
|
|
|
| Expect(Token::ARROW, CHECK_OK);
|
|
|
| + function_state.set_consecutive_class_declaration_batch_start(
|
| + scanner()->location().beg_pos);
|
| if (peek() == Token::LBRACE) {
|
| // Multiple statement body
|
| Consume(Token::LBRACE);
|
|
|