@@ -59,31 +59,40 @@ impl<'ast> Parse<'ast> for Pattern<'ast> {
59
59
}
60
60
}
61
61
62
- impl < ' ast , N > Parse < ' ast > for Function < ' ast , N > where
62
+ impl < ' ast , N > Function < ' ast , N > where
63
63
N : Name < ' ast > + Parse < ' ast , Output = N > ,
64
64
{
65
- type Output = Self ;
66
-
67
65
#[ inline]
68
- fn parse ( par : & mut Parser < ' ast > ) -> Self :: Output {
69
- let generator : bool = if par. lexer . token == OperatorMultiplication {
66
+ pub fn with_async_flag ( par : & mut Parser < ' ast > , is_async : bool ) -> Function < ' ast , N > {
67
+ let is_generator : bool = if par. lexer . token == OperatorMultiplication {
70
68
par. lexer . consume ( ) ;
71
69
true
72
70
} else {
73
71
false
74
72
} ;
75
-
76
73
let name = N :: parse ( par) ;
77
74
78
75
Function {
79
76
name,
80
- generator,
77
+ generator : is_generator,
78
+ is_async,
81
79
params : par. params ( ) ,
82
80
body : par. block ( ) ,
83
81
}
84
82
}
85
83
}
86
84
85
+ impl < ' ast , N > Parse < ' ast > for Function < ' ast , N > where
86
+ N : Name < ' ast > + Parse < ' ast , Output = N > ,
87
+ {
88
+ type Output = Self ;
89
+
90
+ #[ inline]
91
+ fn parse ( par : & mut Parser < ' ast > ) -> Self :: Output {
92
+ Self :: with_async_flag ( par, false )
93
+ }
94
+ }
95
+
87
96
impl < ' ast , N > Parse < ' ast > for Node < ' ast , Function < ' ast , N > > where
88
97
N : Name < ' ast > + Parse < ' ast , Output = N > ,
89
98
{
@@ -400,6 +409,7 @@ mod test {
400
409
Function {
401
410
name : mock. name ( "foo" ) ,
402
411
generator : false ,
412
+ is_async : false ,
403
413
params : NodeList :: empty ( ) ,
404
414
body : mock. empty_block ( ) ,
405
415
}
@@ -418,6 +428,7 @@ mod test {
418
428
Function {
419
429
name : mock. name ( "foo" ) ,
420
430
generator : true ,
431
+ is_async : false ,
421
432
params : NodeList :: empty ( ) ,
422
433
body : mock. empty_block ( ) ,
423
434
}
@@ -434,6 +445,7 @@ mod test {
434
445
Function {
435
446
name : mock. name ( "foo" ) ,
436
447
generator : true ,
448
+ is_async : false ,
437
449
params : NodeList :: empty ( ) ,
438
450
body : mock. empty_block ( ) ,
439
451
}
@@ -450,6 +462,7 @@ mod test {
450
462
Function {
451
463
name : mock. name ( "foo" ) ,
452
464
generator : true ,
465
+ is_async : false ,
453
466
params : NodeList :: empty ( ) ,
454
467
body : mock. empty_block ( ) ,
455
468
}
@@ -468,6 +481,7 @@ mod test {
468
481
Function {
469
482
name : mock. name ( "foo" ) ,
470
483
generator : false ,
484
+ is_async : false ,
471
485
params : mock. list ( [
472
486
Pattern :: Identifier ( "bar" ) ,
473
487
Pattern :: Identifier ( "baz" ) ,
@@ -488,6 +502,7 @@ mod test {
488
502
Function {
489
503
name : mock. name ( "foo" ) ,
490
504
generator : false ,
505
+ is_async : false ,
491
506
params : NodeList :: empty ( ) ,
492
507
body : mock. block ( [
493
508
mock. ptr ( "bar" ) ,
@@ -508,6 +523,7 @@ mod test {
508
523
Function {
509
524
name : mock. name ( "foo" ) ,
510
525
generator : false ,
526
+ is_async : false ,
511
527
params : mock. list ( [
512
528
Pattern :: AssignmentPattern {
513
529
left : mock. ptr ( Pattern :: Identifier ( "a" ) ) ,
@@ -541,6 +557,7 @@ mod test {
541
557
Function {
542
558
name : mock. name ( "foo" ) ,
543
559
generator : false ,
560
+ is_async : false ,
544
561
params : mock. list ( [
545
562
Pattern :: Identifier ( "a" ) ,
546
563
Pattern :: Identifier ( "b" ) ,
@@ -569,6 +586,7 @@ mod test {
569
586
Function {
570
587
name : mock. name ( "foo" ) ,
571
588
generator : false ,
589
+ is_async : false ,
572
590
params : mock. list ( [
573
591
Pattern :: RestElement {
574
592
argument : mock. ptr ( "rest" ) ,
@@ -589,6 +607,7 @@ mod test {
589
607
Function {
590
608
name : mock. name ( "foo" ) ,
591
609
generator : false ,
610
+ is_async : false ,
592
611
params : mock. list ( [
593
612
Pattern :: Identifier ( "a" ) ,
594
613
Pattern :: AssignmentPattern {
@@ -667,6 +686,7 @@ mod test {
667
686
value : mock. ptr ( Function {
668
687
name : EmptyName ,
669
688
generator : false ,
689
+ is_async : false ,
670
690
params : mock. list ( [
671
691
Pattern :: Identifier ( "bar" ) ,
672
692
Pattern :: Identifier ( "baz" )
@@ -716,6 +736,7 @@ mod test {
716
736
value : mock. ptr ( Function {
717
737
name : EmptyName ,
718
738
generator : false ,
739
+ is_async : false ,
719
740
params : mock. list ( [
720
741
Pattern :: Identifier ( "bar" ) ,
721
742
Pattern :: Identifier ( "baz" )
@@ -732,6 +753,7 @@ mod test {
732
753
value : mock. ptr ( Function {
733
754
name : EmptyName ,
734
755
generator : false ,
756
+ is_async : false ,
735
757
params : mock. list ( [
736
758
Pattern :: Identifier ( "moon" )
737
759
] ) ,
@@ -747,6 +769,7 @@ mod test {
747
769
value : mock. ptr ( Function {
748
770
name : EmptyName ,
749
771
generator : false ,
772
+ is_async : false ,
750
773
params : NodeList :: empty ( ) ,
751
774
body : mock. empty_block ( )
752
775
} )
@@ -758,6 +781,7 @@ mod test {
758
781
value : mock. ptr ( Function {
759
782
name : EmptyName ,
760
783
generator : false ,
784
+ is_async : false ,
761
785
params : NodeList :: empty ( ) ,
762
786
body : mock. empty_block ( )
763
787
} )
@@ -769,6 +793,7 @@ mod test {
769
793
value : mock. ptr ( Function {
770
794
name : EmptyName ,
771
795
generator : false ,
796
+ is_async : false ,
772
797
params : NodeList :: empty ( ) ,
773
798
body : mock. empty_block ( )
774
799
} )
@@ -867,6 +892,7 @@ mod test {
867
892
value : mock. ptr ( Function {
868
893
name : EmptyName ,
869
894
generator : false ,
895
+ is_async : false ,
870
896
params : mock. list ( [
871
897
Pattern :: Identifier ( "foo" )
872
898
] ) ,
@@ -880,6 +906,7 @@ mod test {
880
906
value : mock. ptr ( Function {
881
907
name : EmptyName ,
882
908
generator : false ,
909
+ is_async : false ,
883
910
params : mock. list ( [
884
911
Pattern :: Identifier ( "bar" )
885
912
] ) ,
0 commit comments