@@ -86,6 +86,8 @@ import qualified Language.JavaScript.Parser.AST as AST
86
86
87
87
' as' { AsToken {} }
88
88
' autosemi' { AutoSemiToken {} }
89
+ ' async' { AsyncToken {} }
90
+ ' await' { AwaitToken {} }
89
91
' break' { BreakToken {} }
90
92
' case' { CaseToken {} }
91
93
' catch' { CatchToken {} }
@@ -331,6 +333,8 @@ OpAssign : '*=' { AST.JSTimesAssign (mkJSAnnot $1) }
331
333
-- TODO : make this include any reserved word too , including future ones
332
334
IdentifierName :: { AST.JSExpression }
333
335
IdentifierName : Identifier {$1 }
336
+ | ' async' { AST.JSIdentifier (mkJSAnnot $1 ) " async" }
337
+ | ' await' { AST.JSIdentifier (mkJSAnnot $1 ) " await" }
334
338
| ' break' { AST.JSIdentifier (mkJSAnnot $1 ) " break" }
335
339
| ' case' { AST.JSIdentifier (mkJSAnnot $1 ) " case" }
336
340
| ' catch' { AST.JSIdentifier (mkJSAnnot $1 ) " catch" }
@@ -407,6 +411,12 @@ For : 'for' { mkJSAnnot $1 }
407
411
Continue :: { AST.JSAnnot }
408
412
Continue : ' continue' { mkJSAnnot $1 }
409
413
414
+ Async :: { AST.JSAnnot }
415
+ Async : ' async' { mkJSAnnot $1 }
416
+
417
+ Await :: { AST.JSAnnot }
418
+ Await : ' await' { mkJSAnnot $1 }
419
+
410
420
Break :: { AST.JSAnnot }
411
421
Break : ' break' { mkJSAnnot $1 }
412
422
@@ -657,6 +667,10 @@ NewExpression :: { AST.JSExpression }
657
667
NewExpression : MemberExpression { $1 {- ' NewExpression1' -} }
658
668
| New NewExpression { AST.JSNewExpression $1 $2 {- ' NewExpression2' -} }
659
669
670
+ AwaitExpression :: { AST.JSExpression }
671
+ AwaitExpression
672
+ : Await Expression { AST.JSAwaitExpression $1 $2 }
673
+
660
674
-- CallExpression : See 11.2
661
675
-- MemberExpression Arguments
662
676
-- CallExpression Arguments
@@ -696,6 +710,7 @@ ArgumentList : AssignmentExpression { AST.JSLOne $1
696
710
LeftHandSideExpression :: { AST.JSExpression }
697
711
LeftHandSideExpression : NewExpression { $1 {- ' LeftHandSideExpression1' -} }
698
712
| CallExpression { $1 {- ' LeftHandSideExpression12' -} }
713
+ | AwaitExpression { $1 {- ' LeftHandSideExpression13' -} }
699
714
700
715
-- PostfixExpression : See 11.3
701
716
-- LeftHandSideExpression
@@ -976,20 +991,23 @@ Statement : StatementNoEmpty { $1 {- 'Statement1' -} }
976
991
| EmptyStatement { $1 {- ' Statement2' -} }
977
992
978
993
StatementNoEmpty :: { AST.JSStatement }
979
- StatementNoEmpty : StatementBlock { $1 {- ' StatementNoEmpty1' -} }
980
- | VariableStatement { $1 {- ' StatementNoEmpty2' -} }
981
- | ExpressionStatement { $1 {- ' StatementNoEmpty4' -} }
982
- | IfStatement { $1 {- ' StatementNoEmpty5' -} }
983
- | IterationStatement { $1 {- ' StatementNoEmpty6' -} }
984
- | ContinueStatement { $1 {- ' StatementNoEmpty7' -} }
985
- | BreakStatement { $1 {- ' StatementNoEmpty8' -} }
986
- | ReturnStatement { $1 {- ' StatementNoEmpty9' -} }
987
- | WithStatement { $1 {- ' StatementNoEmpty10' -} }
988
- | LabelledStatement { $1 {- ' StatementNoEmpty11' -} }
989
- | SwitchStatement { $1 {- ' StatementNoEmpty12' -} }
990
- | ThrowStatement { $1 {- ' StatementNoEmpty13' -} }
991
- | TryStatement { $1 {- ' StatementNoEmpty14' -} }
992
- | DebuggerStatement { $1 {- ' StatementNoEmpty15' -} }
994
+ StatementNoEmpty
995
+ : IfStatement { $1 {- ' StatementNoEmpty5' -} }
996
+ | ContinueStatement { $1 {- ' StatementNoEmpty7' -} }
997
+ | BreakStatement { $1 {- ' StatementNoEmpty8' -} }
998
+ | ReturnStatement { $1 {- ' StatementNoEmpty9' -} }
999
+ | WithStatement { $1 {- ' StatementNoEmpty10' -} }
1000
+ | LabelledStatement { $1 {- ' StatementNoEmpty11' -} }
1001
+ | SwitchStatement { $1 {- ' StatementNoEmpty12' -} }
1002
+ | ThrowStatement { $1 {- ' StatementNoEmpty13' -} }
1003
+ | TryStatement { $1 {- ' StatementNoEmpty14' -} }
1004
+ | StatementBlock { $1 {- ' StatementNoEmpty1' -} }
1005
+ | VariableStatement { $1 {- ' StatementNoEmpty2' -} }
1006
+ | IterationStatement { $1 {- ' StatementNoEmpty6' -} }
1007
+ | ExpressionStatement { $1 {- ' StatementNoEmpty4' -} }
1008
+ | AsyncFunctionStatement { $1 {- ' StatementNoEmpty15' -} }
1009
+ | DebuggerStatement { $1 {- ' StatementNoEmpty15' -} }
1010
+
993
1011
994
1012
995
1013
StatementBlock :: { AST.JSStatement }
@@ -1208,7 +1226,10 @@ DebuggerStatement : 'debugger' MaybeSemi { AST.JSExpressionStatement (AST.JSLite
1208
1226
-- FunctionDeclaration : See clause 13
1209
1227
-- function Identifier ( FormalParameterListopt ) { FunctionBody }
1210
1228
FunctionDeclaration :: { AST.JSStatement }
1211
- FunctionDeclaration : NamedFunctionExpression MaybeSemi { expressionToStatement $1 $2 {- ' FunctionDeclaration1' -} }
1229
+ FunctionDeclaration : NamedFunctionExpression MaybeSemi { expressionToStatement $1 $2 {- ' FunctionDeclaration1' -} }
1230
+
1231
+ AsyncFunctionStatement :: { AST.JSStatement }
1232
+ AsyncFunctionStatement : Async NamedFunctionExpression MaybeSemi { expressionToAsyncFunction $1 $2 $3 {- ' AsyncFunctionStatement1' -} }
1212
1233
1213
1234
-- FunctionExpression : See clause 13
1214
1235
-- function Identifieropt ( FormalParameterListopt ) { FunctionBody }
@@ -1499,6 +1520,9 @@ expressionToStatement (AST.JSMemberExpression e l a r) s = AST.JSMethodCall e l
1499
1520
expressionToStatement (AST.JSClassExpression a b@(AST.JSIdentName{}) c d e f) s = AST.JSClass a b c d e f s
1500
1521
expressionToStatement exp s = AST.JSExpressionStatement exp s
1501
1522
1523
+ expressionToAsyncFunction :: AST.JSAnnot -> AST.JSExpression -> AST.JSSemi -> AST.JSStatement
1524
+ expressionToAsyncFunction aa (AST.JSFunctionExpression a b@(AST.JSIdentName{}) c d e f) s = AST.JSAsyncFunction aa a b c d e f s
1525
+ expressionToAsyncFunction _aa _exp _s = error "Bad async function."
1502
1526
1503
1527
mkJSCallExpression :: AST.JSExpression -> JSArguments -> AST.JSExpression
1504
1528
mkJSCallExpression e (JSArguments l arglist r) = AST.JSCallExpression e l arglist r
0 commit comments