diff --git a/packages/babel-parser/src/parser/statement.js b/packages/babel-parser/src/parser/statement.js index cdfd8313c5..7a49ba3fce 100644 --- a/packages/babel-parser/src/parser/statement.js +++ b/packages/babel-parser/src/parser/statement.js @@ -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); diff --git a/scripts/tests/test262/test262_whitelist.txt b/scripts/tests/test262/test262_whitelist.txt index 51e4a19de6..535b174422 100644 --- a/scripts/tests/test262/test262_whitelist.txt +++ b/scripts/tests/test262/test262_whitelist.txt @@ -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) \ No newline at end of file