Parse class name in strict mode

The specification defines that the whole class declaration is parsed in strict mode
This commit is contained in:
Daniel Tschinder 2019-01-22 00:01:09 -08:00
parent 8071dca9ad
commit f4f5ca2aaa
2 changed files with 2 additions and 18 deletions

View File

@ -1048,12 +1048,12 @@ export default class StatementParser extends ExpressionParser {
): T {
this.next();
this.takeDecorators(node);
this.parseClassId(node, isStatement, optionalId);
// class bodies and heritages are implicitly strict
// A class definition is always strict mode code.
const oldStrict = this.state.strict;
this.state.strict = true;
this.parseClassId(node, isStatement, optionalId);
this.parseClassSuper(node);
this.parseClassBody(node);

View File

@ -774,8 +774,6 @@ language/expressions/class/elements/syntax/early-errors/super-private-access-inv
language/expressions/class/elements/syntax/early-errors/super-private-access-invalid.js(strict mode)
language/expressions/function/dflt-params-duplicates.js(default)
language/expressions/generators/dflt-params-duplicates.js(default)
language/expressions/object/let-non-strict-access.js(default)
language/expressions/object/let-non-strict-syntax.js(default)
language/expressions/object/method-definition/async-gen-meth-dflt-params-duplicates.js(default)
language/expressions/object/method-definition/async-meth-dflt-params-duplicates.js(default)
language/expressions/object/method-definition/early-errors-object-method-async-lineterminator.js(default)
@ -1140,7 +1138,6 @@ language/statements/class/syntax/early-errors/class-definition-evaluation-block-
language/statements/class/syntax/early-errors/class-definition-evaluation-scriptbody-duplicate-binding.js(default)
language/statements/class/syntax/early-errors/class-definition-evaluation-scriptbody-duplicate-binding.js(strict mode)
language/statements/const/redeclaration-error-from-within-strict-mode-function-const.js(default)
language/statements/for-await-of/let-block-with-newline.js(default)
language/statements/for-await-of/let-identifier-with-newline.js(default)
language/statements/for-in/dstr/array-rest-before-elision.js(default)
language/statements/for-in/dstr/array-rest-before-elision.js(strict mode)
@ -1154,10 +1151,6 @@ language/statements/for-in/head-let-bound-names-dup.js(default)
language/statements/for-in/head-let-bound-names-dup.js(strict mode)
language/statements/for-in/head-let-bound-names-in-stmt.js(default)
language/statements/for-in/head-let-bound-names-in-stmt.js(strict mode)
language/statements/for-in/head-lhs-let.js(default)
language/statements/for-in/head-var-bound-names-let.js(default)
language/statements/for-in/identifier-let-allowed-as-lefthandside-expression-not-strict.js(default)
language/statements/for-in/let-block-with-newline.js(default)
language/statements/for-in/let-identifier-with-newline.js(default)
language/statements/for-of/dstr/array-rest-before-elision.js(default)
language/statements/for-of/dstr/array-rest-before-elision.js(strict mode)
@ -1176,26 +1169,19 @@ language/statements/for-of/head-let-bound-names-dup.js(default)
language/statements/for-of/head-let-bound-names-dup.js(strict mode)
language/statements/for-of/head-let-bound-names-in-stmt.js(default)
language/statements/for-of/head-let-bound-names-in-stmt.js(strict mode)
language/statements/for-of/head-var-bound-names-let.js(default)
language/statements/for-of/head-var-no-expr.js(default)
language/statements/for-of/head-var-no-expr.js(strict mode)
language/statements/for-of/let-block-with-newline.js(default)
language/statements/for-of/let-identifier-with-newline.js(default)
language/statements/for/head-let-bound-names-in-stmt.js(default)
language/statements/for/head-let-bound-names-in-stmt.js(strict mode)
language/statements/for/head-lhs-let.js(default)
language/statements/for/let-block-with-newline.js(default)
language/statements/for/let-identifier-with-newline.js(default)
language/statements/function/dflt-params-duplicates.js(default)
language/statements/generators/dflt-params-duplicates.js(default)
language/statements/if/let-block-with-newline.js(default)
language/statements/if/let-identifier-with-newline.js(default)
language/statements/labeled/let-block-with-newline.js(default)
language/statements/labeled/let-identifier-with-newline.js(default)
language/statements/labeled/value-yield-non-strict-escaped.js(default)
language/statements/labeled/value-yield-non-strict.js(default)
language/statements/let/redeclaration-error-from-within-strict-mode-function.js(default)
language/statements/let/syntax/escaped-let.js(default)
language/statements/switch/syntax/redeclaration/async-function-name-redeclaration-attempt-with-async-function.js(default)
language/statements/switch/syntax/redeclaration/async-function-name-redeclaration-attempt-with-async-function.js(strict mode)
language/statements/switch/syntax/redeclaration/async-function-name-redeclaration-attempt-with-async-generator.js(default)
@ -1327,7 +1313,5 @@ language/statements/try/early-catch-lex.js(default)
language/statements/try/early-catch-lex.js(strict mode)
language/statements/try/early-catch-var.js(default)
language/statements/try/early-catch-var.js(strict mode)
language/statements/while/let-block-with-newline.js(default)
language/statements/while/let-identifier-with-newline.js(default)
language/statements/with/let-block-with-newline.js(default)
language/statements/with/let-identifier-with-newline.js(default)