diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index 96d923039166..46004ee24abf 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -2393,7 +2393,7 @@ export default class ExpressionParser extends LValParser { if (this.prodParam.hasAwait) { this.raise(startLoc, Errors.AwaitBindingIdentifier); return; - } else if (this.scope.inStaticBlock && !this.scope.inFunction) { + } else if (this.scope.inStaticBlock) { this.raise(startLoc, Errors.AwaitBindingIdentifierInStaticBlock); return; } else { diff --git a/packages/babel-parser/src/util/scope.js b/packages/babel-parser/src/util/scope.js index 235ab5c9dbcb..d28d4587f91e 100644 --- a/packages/babel-parser/src/util/scope.js +++ b/packages/babel-parser/src/util/scope.js @@ -65,7 +65,16 @@ export default class ScopeHandler { return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0; } get inStaticBlock() { - return (this.currentThisScopeFlags() & SCOPE_STATIC_BLOCK) > 0; + for (let i = this.scopeStack.length - 1; ; i--) { + const { flags } = this.scopeStack[i]; + if (flags & SCOPE_STATIC_BLOCK) { + return true; + } + if (flags & (SCOPE_VAR | SCOPE_CLASS)) { + // function body, module body, class property initializers + return false; + } + } } get inNonArrowFunction() { return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;