@@ -59,31 +59,40 @@ impl<'ast> Parse<'ast> for Pattern<'ast> {
5959 }
6060}
6161
62- impl < ' ast , N > Parse < ' ast > for Function < ' ast , N > where
62+ impl < ' ast , N > Function < ' ast , N > where
6363 N : Name < ' ast > + Parse < ' ast , Output = N > ,
6464{
65- type Output = Self ;
66-
6765 #[ 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 {
7068 par. lexer . consume ( ) ;
7169 true
7270 } else {
7371 false
7472 } ;
75-
7673 let name = N :: parse ( par) ;
7774
7875 Function {
7976 name,
80- generator,
77+ generator : is_generator,
78+ is_async,
8179 params : par. params ( ) ,
8280 body : par. block ( ) ,
8381 }
8482 }
8583}
8684
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+
8796impl < ' ast , N > Parse < ' ast > for Node < ' ast , Function < ' ast , N > > where
8897 N : Name < ' ast > + Parse < ' ast , Output = N > ,
8998{
@@ -400,6 +409,7 @@ mod test {
400409 Function {
401410 name : mock. name ( "foo" ) ,
402411 generator : false ,
412+ is_async : false ,
403413 params : NodeList :: empty ( ) ,
404414 body : mock. empty_block ( ) ,
405415 }
@@ -418,6 +428,7 @@ mod test {
418428 Function {
419429 name : mock. name ( "foo" ) ,
420430 generator : true ,
431+ is_async : false ,
421432 params : NodeList :: empty ( ) ,
422433 body : mock. empty_block ( ) ,
423434 }
@@ -434,6 +445,7 @@ mod test {
434445 Function {
435446 name : mock. name ( "foo" ) ,
436447 generator : true ,
448+ is_async : false ,
437449 params : NodeList :: empty ( ) ,
438450 body : mock. empty_block ( ) ,
439451 }
@@ -450,6 +462,7 @@ mod test {
450462 Function {
451463 name : mock. name ( "foo" ) ,
452464 generator : true ,
465+ is_async : false ,
453466 params : NodeList :: empty ( ) ,
454467 body : mock. empty_block ( ) ,
455468 }
@@ -468,6 +481,7 @@ mod test {
468481 Function {
469482 name : mock. name ( "foo" ) ,
470483 generator : false ,
484+ is_async : false ,
471485 params : mock. list ( [
472486 Pattern :: Identifier ( "bar" ) ,
473487 Pattern :: Identifier ( "baz" ) ,
@@ -488,6 +502,7 @@ mod test {
488502 Function {
489503 name : mock. name ( "foo" ) ,
490504 generator : false ,
505+ is_async : false ,
491506 params : NodeList :: empty ( ) ,
492507 body : mock. block ( [
493508 mock. ptr ( "bar" ) ,
@@ -508,6 +523,7 @@ mod test {
508523 Function {
509524 name : mock. name ( "foo" ) ,
510525 generator : false ,
526+ is_async : false ,
511527 params : mock. list ( [
512528 Pattern :: AssignmentPattern {
513529 left : mock. ptr ( Pattern :: Identifier ( "a" ) ) ,
@@ -541,6 +557,7 @@ mod test {
541557 Function {
542558 name : mock. name ( "foo" ) ,
543559 generator : false ,
560+ is_async : false ,
544561 params : mock. list ( [
545562 Pattern :: Identifier ( "a" ) ,
546563 Pattern :: Identifier ( "b" ) ,
@@ -569,6 +586,7 @@ mod test {
569586 Function {
570587 name : mock. name ( "foo" ) ,
571588 generator : false ,
589+ is_async : false ,
572590 params : mock. list ( [
573591 Pattern :: RestElement {
574592 argument : mock. ptr ( "rest" ) ,
@@ -589,6 +607,7 @@ mod test {
589607 Function {
590608 name : mock. name ( "foo" ) ,
591609 generator : false ,
610+ is_async : false ,
592611 params : mock. list ( [
593612 Pattern :: Identifier ( "a" ) ,
594613 Pattern :: AssignmentPattern {
@@ -667,6 +686,7 @@ mod test {
667686 value : mock. ptr ( Function {
668687 name : EmptyName ,
669688 generator : false ,
689+ is_async : false ,
670690 params : mock. list ( [
671691 Pattern :: Identifier ( "bar" ) ,
672692 Pattern :: Identifier ( "baz" )
@@ -716,6 +736,7 @@ mod test {
716736 value : mock. ptr ( Function {
717737 name : EmptyName ,
718738 generator : false ,
739+ is_async : false ,
719740 params : mock. list ( [
720741 Pattern :: Identifier ( "bar" ) ,
721742 Pattern :: Identifier ( "baz" )
@@ -732,6 +753,7 @@ mod test {
732753 value : mock. ptr ( Function {
733754 name : EmptyName ,
734755 generator : false ,
756+ is_async : false ,
735757 params : mock. list ( [
736758 Pattern :: Identifier ( "moon" )
737759 ] ) ,
@@ -747,6 +769,7 @@ mod test {
747769 value : mock. ptr ( Function {
748770 name : EmptyName ,
749771 generator : false ,
772+ is_async : false ,
750773 params : NodeList :: empty ( ) ,
751774 body : mock. empty_block ( )
752775 } )
@@ -758,6 +781,7 @@ mod test {
758781 value : mock. ptr ( Function {
759782 name : EmptyName ,
760783 generator : false ,
784+ is_async : false ,
761785 params : NodeList :: empty ( ) ,
762786 body : mock. empty_block ( )
763787 } )
@@ -769,6 +793,7 @@ mod test {
769793 value : mock. ptr ( Function {
770794 name : EmptyName ,
771795 generator : false ,
796+ is_async : false ,
772797 params : NodeList :: empty ( ) ,
773798 body : mock. empty_block ( )
774799 } )
@@ -867,6 +892,7 @@ mod test {
867892 value : mock. ptr ( Function {
868893 name : EmptyName ,
869894 generator : false ,
895+ is_async : false ,
870896 params : mock. list ( [
871897 Pattern :: Identifier ( "foo" )
872898 ] ) ,
@@ -880,6 +906,7 @@ mod test {
880906 value : mock. ptr ( Function {
881907 name : EmptyName ,
882908 generator : false ,
909+ is_async : false ,
883910 params : mock. list ( [
884911 Pattern :: Identifier ( "bar" )
885912 ] ) ,
0 commit comments