Skip to content

Commit e68682f

Browse files
committed
Remove unreachable! from macros.rs
replaced unreachable! with error handling using Option. Closes #2558
1 parent 0f55350 commit e68682f

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/macros.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,7 @@ impl MacroArgParser {
687687
self.buf.clear();
688688
}
689689

690-
fn add_meta_variable(&mut self, iter: &mut Cursor) {
690+
fn add_meta_variable(&mut self, iter: &mut Cursor) -> Option<()> {
691691
match iter.next() {
692692
Some(TokenTree::Token(sp, Token::Ident(ref ident))) => {
693693
self.result.push(ParsedMacroArg {
@@ -697,8 +697,9 @@ impl MacroArgParser {
697697

698698
self.buf.clear();
699699
self.is_meta_var = false;
700+
Some(())
700701
}
701-
_ => unreachable!(),
702+
_ => None,
702703
}
703704
}
704705

@@ -716,7 +717,7 @@ impl MacroArgParser {
716717
delim: DelimToken,
717718
iter: &mut Cursor,
718719
span: Span,
719-
) {
720+
) -> Option<()> {
720721
let mut buffer = String::new();
721722
let mut first = false;
722723
let mut lo = span.lo();
@@ -740,7 +741,7 @@ impl MacroArgParser {
740741
buffer.push_str(&pprust::token_to_string(t));
741742
hi = sp.hi();
742743
}
743-
_ => unreachable!(),
744+
_ => return None,
744745
}
745746
}
746747

@@ -758,6 +759,7 @@ impl MacroArgParser {
758759
kind: MacroArgKind::Repeat(delim, inner, another, self.last_tok.clone()),
759760
span: mk_sp(self.lo, self.hi),
760761
});
762+
Some(())
761763
}
762764

763765
fn update_buffer(&mut self, lo: BytePos, t: &Token) {
@@ -802,7 +804,7 @@ impl MacroArgParser {
802804
}
803805

804806
/// 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>> {
806808
let mut iter = (tokens.into(): TokenStream).trees();
807809

808810
while let Some(ref tok) = iter.next() {
@@ -819,7 +821,7 @@ impl MacroArgParser {
819821
self.start_tok = Token::Dollar;
820822
}
821823
TokenTree::Token(_, Token::Colon) if self.is_meta_var => {
822-
self.add_meta_variable(&mut iter);
824+
self.add_meta_variable(&mut iter)?;
823825
}
824826
TokenTree::Token(sp, ref t) => self.update_buffer(sp.lo(), t),
825827
TokenTree::Delimited(sp, delimited) => {
@@ -834,10 +836,10 @@ impl MacroArgParser {
834836
// Parse the stuff inside delimiters.
835837
let mut parser = MacroArgParser::new();
836838
parser.lo = sp.lo();
837-
let delimited_arg = parser.parse(delimited.tts.clone());
839+
let delimited_arg = parser.parse(delimited.tts.clone())?;
838840

839841
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)?;
841843
} else {
842844
self.add_delimited(delimited_arg, delimited.delim, *sp);
843845
}
@@ -853,7 +855,7 @@ impl MacroArgParser {
853855
self.add_other();
854856
}
855857

856-
self.result
858+
Some(self.result)
857859
}
858860
}
859861

@@ -915,7 +917,7 @@ fn format_macro_args(
915917
toks: ThinTokenStream,
916918
shape: Shape,
917919
) -> Option<String> {
918-
let parsed_args = MacroArgParser::new().parse(toks);
920+
let parsed_args = MacroArgParser::new().parse(toks)?;
919921
wrap_macro_args(context, &parsed_args, shape)
920922
}
921923

0 commit comments

Comments
 (0)