diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index 068600a27ac0..49556c8fbae8 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -2415,7 +2415,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..695b866ba091 100644 --- a/packages/babel-parser/src/util/scope.js +++ b/packages/babel-parser/src/util/scope.js @@ -65,7 +65,20 @@ 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_VAR) { + // function body, module body + return false; + } + if (flags & SCOPE_STATIC_BLOCK) { + return true; + } + if (flags & SCOPE_CLASS) { + // class property initializers + return false; + } + } } get inNonArrowFunction() { return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;