diff --git a/packages/async-rewriter2/src/async-writer-babel.spec.ts b/packages/async-rewriter2/src/async-writer-babel.spec.ts index 5d951bec79..f536aea1d6 100644 --- a/packages/async-rewriter2/src/async-writer-babel.spec.ts +++ b/packages/async-rewriter2/src/async-writer-babel.spec.ts @@ -694,7 +694,7 @@ describe('AsyncWriter', () => { }); it('throws sensible error messages for long expressions', () => { - expect(() => runTranspiledCode('var abcdefghijklmnopqrstuvwxyz; abcdefghijklmnopqrstuvwxyz()')) + expect(() => runTranspiledCode('globalThis.abcdefghijklmnopqrstuvwxyz = {}; abcdefghijklmnopqrstuvwxyz()')) .to.throw('abcdefghijklm ... uvwxyz is not a function'); }); }); diff --git a/packages/async-rewriter2/src/stages/transform-maybe-await.ts b/packages/async-rewriter2/src/stages/transform-maybe-await.ts index ba1f3a531a..74aab6c614 100644 --- a/packages/async-rewriter2/src/stages/transform-maybe-await.ts +++ b/packages/async-rewriter2/src/stages/transform-maybe-await.ts @@ -456,11 +456,17 @@ export default ({ types: t }: { types: typeof BabelTypes }): babel.PluginObj<{ f path.isParenthesizedExpression() || path.isUnaryExpression() || path.isSuper() || // Would probably break stuff + path.isThisExpression() || path.isAwaitExpression() || // No point in awaiting twice path.parentPath.isAwaitExpression()) { return; } + // If it's an identifier and we know where it has been declared, it's fine as well + // because having seen a declaration means either being undefined or having seen + // an assignment as well. + if (path.isIdentifier() && path.scope.hasBinding(path.node.name)) return; + const { expressionHolder, isSyntheticPromise, assertNotSyntheticPromise } = identifierGroup; const prettyOriginalString = limitStringLength( path.node.start !== undefined ?