@@ -101,6 +101,24 @@ func (tx *forawaitTransformer) trackSuperAccess(node *ast.Node) {
101101 }
102102}
103103
104+ func (tx * forawaitTransformer ) affectsSubtree (excludeFacts forAwaitHierarchyFacts , includeFacts forAwaitHierarchyFacts ) bool {
105+ return tx .forAwaitHierarchyFacts != (tx .forAwaitHierarchyFacts &^excludeFacts | includeFacts )
106+ }
107+
108+ // enterSubtree sets the HierarchyFacts for this node prior to visiting this node's subtree,
109+ // returning the facts set prior to modification.
110+ func (tx * forawaitTransformer ) enterSubtree (excludeFacts forAwaitHierarchyFacts , includeFacts forAwaitHierarchyFacts ) forAwaitHierarchyFacts {
111+ ancestorFacts := tx .forAwaitHierarchyFacts
112+ tx .forAwaitHierarchyFacts = (tx .forAwaitHierarchyFacts &^excludeFacts | includeFacts ) & forAwaitHierarchyFactsAncestorFactsMask
113+ return ancestorFacts
114+ }
115+
116+ // exitSubtree restores the HierarchyFacts for this node's ancestor after visiting this node's
117+ // subtree.
118+ func (tx * forawaitTransformer ) exitSubtree (ancestorFacts forAwaitHierarchyFacts ) {
119+ tx .forAwaitHierarchyFacts = ancestorFacts
120+ }
121+
104122func (tx * forawaitTransformer ) visit (node * ast.Node ) * ast.Node {
105123 if node .SubtreeFacts ()& ast .SubtreeContainsForAwaitOrAsyncGenerator == 0 {
106124 if tx .capturedSuperProperties != nil {
@@ -145,22 +163,13 @@ func (tx *forawaitTransformer) visit(node *ast.Node) *ast.Node {
145163 }
146164}
147165
148- func (tx * forawaitTransformer ) affectsSubtree (excludeFacts forAwaitHierarchyFacts , includeFacts forAwaitHierarchyFacts ) bool {
149- return tx .forAwaitHierarchyFacts != (tx .forAwaitHierarchyFacts &^excludeFacts | includeFacts )
150- }
151-
152- // enterSubtree sets the HierarchyFacts for this node prior to visiting this node's subtree,
153- // returning the facts set prior to modification.
154- func (tx * forawaitTransformer ) enterSubtree (excludeFacts forAwaitHierarchyFacts , includeFacts forAwaitHierarchyFacts ) forAwaitHierarchyFacts {
155- ancestorFacts := tx .forAwaitHierarchyFacts
156- tx .forAwaitHierarchyFacts = (tx .forAwaitHierarchyFacts &^excludeFacts | includeFacts ) & forAwaitHierarchyFactsAncestorFactsMask
157- return ancestorFacts
158- }
159-
160- // exitSubtree restores the HierarchyFacts for this node's ancestor after visiting this node's
161- // subtree.
162- func (tx * forawaitTransformer ) exitSubtree (ancestorFacts forAwaitHierarchyFacts ) {
163- tx .forAwaitHierarchyFacts = ancestorFacts
166+ func (tx * forawaitTransformer ) visitorNoAsyncModifier () * ast.NodeVisitor {
167+ return tx .EmitContext ().NewNodeVisitor (func (node * ast.Node ) * ast.Node {
168+ if node .Kind == ast .KindAsyncKeyword {
169+ return nil
170+ }
171+ return node
172+ })
164173}
165174
166175func (tx * forawaitTransformer ) doWithHierarchyFacts (cb func (* forawaitTransformer , * ast.Node ) * ast.Node , node * ast.Node , excludeFacts forAwaitHierarchyFacts , includeFacts forAwaitHierarchyFacts ) * ast.Node {
@@ -177,18 +186,6 @@ func (tx *forawaitTransformer) visitDefault(node *ast.Node) *ast.Node {
177186 return tx .Visitor ().VisitEachChild (node )
178187}
179188
180- func (tx * forawaitTransformer ) visitSourceFile (node * ast.SourceFile ) * ast.Node {
181- ancestorFacts := tx .enterSubtree (
182- forAwaitHierarchyFactsSourceFileExcludes ,
183- forAwaitHierarchyFactsStrictModeSourceFileIncludes ,
184- )
185- tx .exportedVariableStatement = false
186- visited := tx .Visitor ().VisitEachChild (node .AsNode ())
187- tx .EmitContext ().AddEmitHelper (visited , tx .EmitContext ().ReadEmitHelpers ()... )
188- tx .exitSubtree (ancestorFacts )
189- return visited
190- }
191-
192189func (tx * forawaitTransformer ) visitAwaitExpression (node * ast.AwaitExpression ) * ast.Node {
193190 if tx .enclosingFunctionFlags & ast .FunctionFlagsAsync != 0 && tx .enclosingFunctionFlags & ast .FunctionFlagsGenerator != 0 {
194191 result := tx .Factory ().NewYieldExpression (
@@ -303,6 +300,18 @@ func (tx *forawaitTransformer) restoreEnclosingLabel(node *ast.Node, outermostLa
303300 )
304301}
305302
303+ func (tx * forawaitTransformer ) visitSourceFile (node * ast.SourceFile ) * ast.Node {
304+ ancestorFacts := tx .enterSubtree (
305+ forAwaitHierarchyFactsSourceFileExcludes ,
306+ forAwaitHierarchyFactsStrictModeSourceFileIncludes ,
307+ )
308+ tx .exportedVariableStatement = false
309+ visited := tx .Visitor ().VisitEachChild (node .AsNode ())
310+ tx .EmitContext ().AddEmitHelper (visited , tx .EmitContext ().ReadEmitHelpers ()... )
311+ tx .exitSubtree (ancestorFacts )
312+ return visited
313+ }
314+
306315// visitForOfStatement visits a ForOfStatement and converts it into a ES2015-compatible ForOfStatement.
307316func (tx * forawaitTransformer ) visitForOfStatement (node * ast.ForInOrOfStatement , outermostLabeledStatement * ast.LabeledStatement ) * ast.Node {
308317 ancestorFacts := tx .enterSubtree (forAwaitHierarchyFactsIterationStatementExcludes , forAwaitHierarchyFactsIterationStatementIncludes )
@@ -316,16 +325,6 @@ func (tx *forawaitTransformer) visitForOfStatement(node *ast.ForInOrOfStatement,
316325 return result
317326}
318327
319- func (tx * forawaitTransformer ) createDownlevelAwait (expression * ast.Node ) * ast.Node {
320- if tx .enclosingFunctionFlags & ast .FunctionFlagsGenerator != 0 {
321- return tx .Factory ().NewYieldExpression (
322- nil , /*asteriskToken*/
323- tx .Factory ().NewAwaitHelper (expression ),
324- )
325- }
326- return tx .Factory ().NewAwaitExpression (expression )
327- }
328-
329328func (tx * forawaitTransformer ) convertForOfStatementHead (node * ast.ForInOrOfStatement , boundValue * ast.Node , nonUserCode * ast.Node ) * ast.Node {
330329 f := tx .Factory ()
331330 value := f .NewTempVariable ()
@@ -389,6 +388,16 @@ func (tx *forawaitTransformer) createForOfBindingStatement(node *ast.Node, bound
389388 return statement
390389}
391390
391+ func (tx * forawaitTransformer ) createDownlevelAwait (expression * ast.Node ) * ast.Node {
392+ if tx .enclosingFunctionFlags & ast .FunctionFlagsGenerator != 0 {
393+ return tx .Factory ().NewYieldExpression (
394+ nil , /*asteriskToken*/
395+ tx .Factory ().NewAwaitHelper (expression ),
396+ )
397+ }
398+ return tx .Factory ().NewAwaitExpression (expression )
399+ }
400+
392401func (tx * forawaitTransformer ) transformForAwaitOfStatement (node * ast.ForInOrOfStatement , outermostLabeledStatement * ast.LabeledStatement , ancestorFacts forAwaitHierarchyFacts ) * ast.Node {
393402 f := tx .Factory ()
394403 expression := tx .Visitor ().VisitNode (node .Expression )
@@ -552,6 +561,42 @@ func (tx *forawaitTransformer) visitConstructorDeclaration(node *ast.Node) *ast.
552561 return updated
553562}
554563
564+ func (tx * forawaitTransformer ) visitGetAccessorDeclaration (node * ast.Node ) * ast.Node {
565+ decl := node .AsGetAccessorDeclaration ()
566+ savedEnclosingFunctionFlags := tx .enclosingFunctionFlags
567+ tx .enclosingFunctionFlags = ast .GetFunctionFlags (node )
568+ updated := tx .Factory ().UpdateGetAccessorDeclaration (
569+ decl ,
570+ decl .Modifiers (),
571+ tx .Visitor ().VisitNode (decl .Name ()),
572+ nil , /*typeParameters*/
573+ tx .EmitContext ().VisitParameters (decl .Parameters , tx .Visitor ()),
574+ nil , /*returnType*/
575+ nil , /*fullSignature*/
576+ tx .EmitContext ().VisitFunctionBody (node .Body (), tx .Visitor ()),
577+ )
578+ tx .enclosingFunctionFlags = savedEnclosingFunctionFlags
579+ return updated
580+ }
581+
582+ func (tx * forawaitTransformer ) visitSetAccessorDeclaration (node * ast.Node ) * ast.Node {
583+ decl := node .AsSetAccessorDeclaration ()
584+ savedEnclosingFunctionFlags := tx .enclosingFunctionFlags
585+ tx .enclosingFunctionFlags = ast .GetFunctionFlags (node )
586+ updated := tx .Factory ().UpdateSetAccessorDeclaration (
587+ decl ,
588+ decl .Modifiers (),
589+ tx .Visitor ().VisitNode (decl .Name ()),
590+ nil , /*typeParameters*/
591+ tx .EmitContext ().VisitParameters (decl .Parameters , tx .Visitor ()),
592+ nil , /*returnType*/
593+ nil , /*fullSignature*/
594+ tx .EmitContext ().VisitFunctionBody (node .Body (), tx .Visitor ()),
595+ )
596+ tx .enclosingFunctionFlags = savedEnclosingFunctionFlags
597+ return updated
598+ }
599+
555600func (tx * forawaitTransformer ) visitMethodDeclaration (node * ast.Node ) * ast.Node {
556601 decl := node .AsMethodDeclaration ()
557602 savedEnclosingFunctionFlags := tx .enclosingFunctionFlags
@@ -597,42 +642,6 @@ func (tx *forawaitTransformer) visitMethodDeclaration(node *ast.Node) *ast.Node
597642 return updated
598643}
599644
600- func (tx * forawaitTransformer ) visitGetAccessorDeclaration (node * ast.Node ) * ast.Node {
601- decl := node .AsGetAccessorDeclaration ()
602- savedEnclosingFunctionFlags := tx .enclosingFunctionFlags
603- tx .enclosingFunctionFlags = ast .GetFunctionFlags (node )
604- updated := tx .Factory ().UpdateGetAccessorDeclaration (
605- decl ,
606- decl .Modifiers (),
607- tx .Visitor ().VisitNode (decl .Name ()),
608- nil , /*typeParameters*/
609- tx .EmitContext ().VisitParameters (decl .Parameters , tx .Visitor ()),
610- nil , /*returnType*/
611- nil , /*fullSignature*/
612- tx .EmitContext ().VisitFunctionBody (node .Body (), tx .Visitor ()),
613- )
614- tx .enclosingFunctionFlags = savedEnclosingFunctionFlags
615- return updated
616- }
617-
618- func (tx * forawaitTransformer ) visitSetAccessorDeclaration (node * ast.Node ) * ast.Node {
619- decl := node .AsSetAccessorDeclaration ()
620- savedEnclosingFunctionFlags := tx .enclosingFunctionFlags
621- tx .enclosingFunctionFlags = ast .GetFunctionFlags (node )
622- updated := tx .Factory ().UpdateSetAccessorDeclaration (
623- decl ,
624- decl .Modifiers (),
625- tx .Visitor ().VisitNode (decl .Name ()),
626- nil , /*typeParameters*/
627- tx .EmitContext ().VisitParameters (decl .Parameters , tx .Visitor ()),
628- nil , /*returnType*/
629- nil , /*fullSignature*/
630- tx .EmitContext ().VisitFunctionBody (node .Body (), tx .Visitor ()),
631- )
632- tx .enclosingFunctionFlags = savedEnclosingFunctionFlags
633- return updated
634- }
635-
636645func (tx * forawaitTransformer ) visitFunctionDeclaration (node * ast.Node ) * ast.Node {
637646 decl := node .AsFunctionDeclaration ()
638647 savedEnclosingFunctionFlags := tx .enclosingFunctionFlags
@@ -859,15 +868,6 @@ func (tx *forawaitTransformer) transformAsyncGeneratorFunctionBody(node *ast.Nod
859868 return block
860869}
861870
862- func (tx * forawaitTransformer ) visitorNoAsyncModifier () * ast.NodeVisitor {
863- return tx .EmitContext ().NewNodeVisitor (func (node * ast.Node ) * ast.Node {
864- if node .Kind == ast .KindAsyncKeyword {
865- return nil
866- }
867- return node
868- })
869- }
870-
871871func (tx * forawaitTransformer ) superPropertyVisitor (node * ast.Node ) * ast.Node {
872872 switch node .Kind {
873873 case ast .KindFunctionExpression , ast .KindFunctionDeclaration ,
0 commit comments