@@ -81,6 +81,8 @@ import Data.Maybe (maybeToList)
8181 ' and' { AndToken {} }
8282 ' as' { AsToken {} }
8383 ' assert' { AssertToken {} }
84+ ' async' { AsyncToken {} }
85+ ' await' { AwaitToken {} }
8486 ' break' { BreakToken {} }
8587 ' bytestring' { ByteStringToken {} }
8688 ' class' { ClassToken {} }
@@ -223,8 +225,9 @@ decorators : many1(decorator) { $1 }
223225
224226decorated :: { StatementSpan }
225227decorated
226- : decorators or(classdef,funcdef)
227- { makeDecorated $1 $2 }
228+ : decorators classdef { makeDecorated $1 $2 }
229+ | decorators funcdef { makeDecorated $1 $2 }
230+ | decorators async_funcdef { makeDecorated $1 $2 }
228231
229232-- funcdef: ' def' NAME parameters [' ->' test] ' :' suite
230233
@@ -515,7 +518,7 @@ assert_stmt :: { StatementSpan }
515518assert_stmt : ' assert' sepBy (test ,' ,' )
516519 { AST .Assert $2 (spanning $1 $2 ) }
517520
518- -- compound_stmt : if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated
521+ -- compound_stmt : if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt
519522
520523compound_stmt :: { StatementSpan }
521524compound_stmt
@@ -527,6 +530,7 @@ compound_stmt
527530 | funcdef { $1 }
528531 | classdef { $1 }
529532 | decorated { $1 }
533+ | async_stmt { $1 }
530534
531535-- if_stmt : ' if' test ' :' suite (' elif' test ' :' suite )* [' else' ' :' suite ]
532536
@@ -556,6 +560,20 @@ for_stmt
556560 : ' for' exprlist ' in' testlist ' :' suite optional_else
557561 { AST .For $2 $4 $6 $7 (spanning (spanning $1 $6 ) $7 ) }
558562
563+ -- async_stmt : ASYNC (funcdef | with_stmt | for_stmt )
564+
565+ async_stmt :: { StatementSpan }
566+ async_stmt
567+ : ' async' funcdef { AST .AsyncFun $2 (spanning $1 $2 ) }
568+ | ' async' with_stmt { AST .AsyncWith $2 (spanning $1 $2 ) }
569+ | ' async' for_stmt { AST .AsyncFor $2 (spanning $1 $2 ) }
570+
571+ -- async_fundef : ASYNC funcdef
572+
573+ async_funcdef :: { StatementSpan }
574+ async_funcdef
575+ : ' async' funcdef { AST .AsyncFun $2 (spanning $1 $2 ) }
576+
559577{-
560578 try_stmt: (' try' ' :' suite
561579 ((except_clause ' :' suite)+ [' else' ' :' suite] [' finally' ' :' suite] | ' finally' ' :' suite))
@@ -754,10 +772,14 @@ factor
754772tilde_op :: { OpSpan }
755773tilde_op: ' ~' { AST.Invert (getSpan $1) }
756774
775+ -- await_expr: ' await ' primary
776+ await_expr :: { ExprSpan }
777+ await_expr : ' await ' atom { AST.Await $2 (spanning $1 $2) }
778+
757779-- power: atom trailer* [' **' factor]
758780
759781power :: { ExprSpan }
760- power : atom many0(trailer) opt(pair(exponent_op, factor))
782+ power : or(await_expr, atom) many0(trailer) opt(pair(exponent_op, factor))
761783 { makeBinOp (addTrailer $1 $2) (maybeToList $3) }
762784
763785exponent_op :: { OpSpan }
0 commit comments