@@ -687,7 +687,7 @@ impl MacroArgParser {
687
687
self . buf . clear ( ) ;
688
688
}
689
689
690
- fn add_meta_variable ( & mut self , iter : & mut Cursor ) {
690
+ fn add_meta_variable ( & mut self , iter : & mut Cursor ) -> Option < ( ) > {
691
691
match iter. next ( ) {
692
692
Some ( TokenTree :: Token ( sp, Token :: Ident ( ref ident) ) ) => {
693
693
self . result . push ( ParsedMacroArg {
@@ -697,8 +697,9 @@ impl MacroArgParser {
697
697
698
698
self . buf . clear ( ) ;
699
699
self . is_meta_var = false ;
700
+ Some ( ( ) )
700
701
}
701
- _ => unreachable ! ( ) ,
702
+ _ => None ,
702
703
}
703
704
}
704
705
@@ -716,7 +717,7 @@ impl MacroArgParser {
716
717
delim : DelimToken ,
717
718
iter : & mut Cursor ,
718
719
span : Span ,
719
- ) {
720
+ ) -> Option < ( ) > {
720
721
let mut buffer = String :: new ( ) ;
721
722
let mut first = false ;
722
723
let mut lo = span. lo ( ) ;
@@ -740,7 +741,7 @@ impl MacroArgParser {
740
741
buffer. push_str ( & pprust:: token_to_string ( t) ) ;
741
742
hi = sp. hi ( ) ;
742
743
}
743
- _ => unreachable ! ( ) ,
744
+ _ => return None ,
744
745
}
745
746
}
746
747
@@ -758,6 +759,7 @@ impl MacroArgParser {
758
759
kind : MacroArgKind :: Repeat ( delim, inner, another, self . last_tok . clone ( ) ) ,
759
760
span : mk_sp ( self . lo , self . hi ) ,
760
761
} ) ;
762
+ Some ( ( ) )
761
763
}
762
764
763
765
fn update_buffer ( & mut self , lo : BytePos , t : & Token ) {
@@ -802,7 +804,7 @@ impl MacroArgParser {
802
804
}
803
805
804
806
/// Returns a collection of parsed macro def's arguments.
805
- pub fn parse ( mut self , tokens : ThinTokenStream ) -> Vec < ParsedMacroArg > {
807
+ pub fn parse ( mut self , tokens : ThinTokenStream ) -> Option < Vec < ParsedMacroArg > > {
806
808
let mut iter = ( tokens. into ( ) : TokenStream ) . trees ( ) ;
807
809
808
810
while let Some ( ref tok) = iter. next ( ) {
@@ -819,7 +821,7 @@ impl MacroArgParser {
819
821
self . start_tok = Token :: Dollar ;
820
822
}
821
823
TokenTree :: Token ( _, Token :: Colon ) if self . is_meta_var => {
822
- self . add_meta_variable ( & mut iter) ;
824
+ self . add_meta_variable ( & mut iter) ? ;
823
825
}
824
826
TokenTree :: Token ( sp, ref t) => self . update_buffer ( sp. lo ( ) , t) ,
825
827
TokenTree :: Delimited ( sp, delimited) => {
@@ -834,10 +836,10 @@ impl MacroArgParser {
834
836
// Parse the stuff inside delimiters.
835
837
let mut parser = MacroArgParser :: new ( ) ;
836
838
parser. lo = sp. lo ( ) ;
837
- let delimited_arg = parser. parse ( delimited. tts . clone ( ) ) ;
839
+ let delimited_arg = parser. parse ( delimited. tts . clone ( ) ) ? ;
838
840
839
841
if self . is_meta_var {
840
- self . add_repeat ( delimited_arg, delimited. delim , & mut iter, * sp) ;
842
+ self . add_repeat ( delimited_arg, delimited. delim , & mut iter, * sp) ? ;
841
843
} else {
842
844
self . add_delimited ( delimited_arg, delimited. delim , * sp) ;
843
845
}
@@ -853,7 +855,7 @@ impl MacroArgParser {
853
855
self . add_other ( ) ;
854
856
}
855
857
856
- self . result
858
+ Some ( self . result )
857
859
}
858
860
}
859
861
@@ -915,7 +917,7 @@ fn format_macro_args(
915
917
toks : ThinTokenStream ,
916
918
shape : Shape ,
917
919
) -> Option < String > {
918
- let parsed_args = MacroArgParser :: new ( ) . parse ( toks) ;
920
+ let parsed_args = MacroArgParser :: new ( ) . parse ( toks) ? ;
919
921
wrap_macro_args ( context, & parsed_args, shape)
920
922
}
921
923
0 commit comments