@@ -681,7 +681,7 @@ impl MacroArgParser {
681
681
self . buf . clear ( ) ;
682
682
}
683
683
684
- fn add_meta_variable ( & mut self , iter : & mut Cursor ) {
684
+ fn add_meta_variable ( & mut self , iter : & mut Cursor ) -> Option < ( ) > {
685
685
match iter. next ( ) {
686
686
Some ( TokenTree :: Token ( sp, Token :: Ident ( ref ident) ) ) => {
687
687
self . result . push ( ParsedMacroArg {
@@ -691,8 +691,9 @@ impl MacroArgParser {
691
691
692
692
self . buf . clear ( ) ;
693
693
self . is_meta_var = false ;
694
+ Some ( ( ) )
694
695
}
695
- _ => unreachable ! ( ) ,
696
+ _ => None ,
696
697
}
697
698
}
698
699
@@ -710,7 +711,7 @@ impl MacroArgParser {
710
711
delim : DelimToken ,
711
712
iter : & mut Cursor ,
712
713
span : Span ,
713
- ) {
714
+ ) -> Option < ( ) > {
714
715
let mut buffer = String :: new ( ) ;
715
716
let mut first = false ;
716
717
let mut lo = span. lo ( ) ;
@@ -734,7 +735,7 @@ impl MacroArgParser {
734
735
buffer. push_str ( & pprust:: token_to_string ( t) ) ;
735
736
hi = sp. hi ( ) ;
736
737
}
737
- _ => unreachable ! ( ) ,
738
+ _ => return None ,
738
739
}
739
740
}
740
741
@@ -752,6 +753,7 @@ impl MacroArgParser {
752
753
kind : MacroArgKind :: Repeat ( delim, inner, another, self . last_tok . clone ( ) ) ,
753
754
span : mk_sp ( self . lo , self . hi ) ,
754
755
} ) ;
756
+ Some ( ( ) )
755
757
}
756
758
757
759
fn update_buffer ( & mut self , lo : BytePos , t : & Token ) {
@@ -796,7 +798,7 @@ impl MacroArgParser {
796
798
}
797
799
798
800
/// Returns a collection of parsed macro def's arguments.
799
- pub fn parse ( mut self , tokens : ThinTokenStream ) -> Vec < ParsedMacroArg > {
801
+ pub fn parse ( mut self , tokens : ThinTokenStream ) -> Option < Vec < ParsedMacroArg > > {
800
802
let mut iter = ( tokens. into ( ) : TokenStream ) . trees ( ) ;
801
803
802
804
while let Some ( ref tok) = iter. next ( ) {
@@ -813,7 +815,7 @@ impl MacroArgParser {
813
815
self . start_tok = Token :: Dollar ;
814
816
}
815
817
TokenTree :: Token ( _, Token :: Colon ) if self . is_meta_var => {
816
- self . add_meta_variable ( & mut iter) ;
818
+ self . add_meta_variable ( & mut iter) ? ;
817
819
}
818
820
TokenTree :: Token ( sp, ref t) => self . update_buffer ( sp. lo ( ) , t) ,
819
821
TokenTree :: Delimited ( sp, delimited) => {
@@ -828,10 +830,10 @@ impl MacroArgParser {
828
830
// Parse the stuff inside delimiters.
829
831
let mut parser = MacroArgParser :: new ( ) ;
830
832
parser. lo = sp. lo ( ) ;
831
- let delimited_arg = parser. parse ( delimited. tts . clone ( ) ) ;
833
+ let delimited_arg = parser. parse ( delimited. tts . clone ( ) ) ? ;
832
834
833
835
if self . is_meta_var {
834
- self . add_repeat ( delimited_arg, delimited. delim , & mut iter, * sp) ;
836
+ self . add_repeat ( delimited_arg, delimited. delim , & mut iter, * sp) ? ;
835
837
} else {
836
838
self . add_delimited ( delimited_arg, delimited. delim , * sp) ;
837
839
}
@@ -847,7 +849,7 @@ impl MacroArgParser {
847
849
self . add_other ( ) ;
848
850
}
849
851
850
- self . result
852
+ Some ( self . result )
851
853
}
852
854
}
853
855
@@ -909,7 +911,7 @@ fn format_macro_args(
909
911
toks : ThinTokenStream ,
910
912
shape : Shape ,
911
913
) -> Option < String > {
912
- let parsed_args = MacroArgParser :: new ( ) . parse ( toks) ;
914
+ let parsed_args = MacroArgParser :: new ( ) . parse ( toks) ? ;
913
915
wrap_macro_args ( context, & parsed_args, shape)
914
916
}
915
917
0 commit comments