Skip to content

Commit 3de184f

Browse files
authored
Merge pull request #2572 from codeworm96/remove_unreachable
Remove unreachable! from macros.rs
2 parents 72b715b + 3810719 commit 3de184f

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

src/macros.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ impl MacroArgParser {
681681
self.buf.clear();
682682
}
683683

684-
fn add_meta_variable(&mut self, iter: &mut Cursor) {
684+
fn add_meta_variable(&mut self, iter: &mut Cursor) -> Option<()> {
685685
match iter.next() {
686686
Some(TokenTree::Token(sp, Token::Ident(ref ident))) => {
687687
self.result.push(ParsedMacroArg {
@@ -691,8 +691,9 @@ impl MacroArgParser {
691691

692692
self.buf.clear();
693693
self.is_meta_var = false;
694+
Some(())
694695
}
695-
_ => unreachable!(),
696+
_ => None,
696697
}
697698
}
698699

@@ -710,7 +711,7 @@ impl MacroArgParser {
710711
delim: DelimToken,
711712
iter: &mut Cursor,
712713
span: Span,
713-
) {
714+
) -> Option<()> {
714715
let mut buffer = String::new();
715716
let mut first = false;
716717
let mut lo = span.lo();
@@ -734,7 +735,7 @@ impl MacroArgParser {
734735
buffer.push_str(&pprust::token_to_string(t));
735736
hi = sp.hi();
736737
}
737-
_ => unreachable!(),
738+
_ => return None,
738739
}
739740
}
740741

@@ -752,6 +753,7 @@ impl MacroArgParser {
752753
kind: MacroArgKind::Repeat(delim, inner, another, self.last_tok.clone()),
753754
span: mk_sp(self.lo, self.hi),
754755
});
756+
Some(())
755757
}
756758

757759
fn update_buffer(&mut self, lo: BytePos, t: &Token) {
@@ -796,7 +798,7 @@ impl MacroArgParser {
796798
}
797799

798800
/// 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>> {
800802
let mut iter = (tokens.into(): TokenStream).trees();
801803

802804
while let Some(ref tok) = iter.next() {
@@ -813,7 +815,7 @@ impl MacroArgParser {
813815
self.start_tok = Token::Dollar;
814816
}
815817
TokenTree::Token(_, Token::Colon) if self.is_meta_var => {
816-
self.add_meta_variable(&mut iter);
818+
self.add_meta_variable(&mut iter)?;
817819
}
818820
TokenTree::Token(sp, ref t) => self.update_buffer(sp.lo(), t),
819821
TokenTree::Delimited(sp, delimited) => {
@@ -828,10 +830,10 @@ impl MacroArgParser {
828830
// Parse the stuff inside delimiters.
829831
let mut parser = MacroArgParser::new();
830832
parser.lo = sp.lo();
831-
let delimited_arg = parser.parse(delimited.tts.clone());
833+
let delimited_arg = parser.parse(delimited.tts.clone())?;
832834

833835
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)?;
835837
} else {
836838
self.add_delimited(delimited_arg, delimited.delim, *sp);
837839
}
@@ -847,7 +849,7 @@ impl MacroArgParser {
847849
self.add_other();
848850
}
849851

850-
self.result
852+
Some(self.result)
851853
}
852854
}
853855

@@ -909,7 +911,7 @@ fn format_macro_args(
909911
toks: ThinTokenStream,
910912
shape: Shape,
911913
) -> Option<String> {
912-
let parsed_args = MacroArgParser::new().parse(toks);
914+
let parsed_args = MacroArgParser::new().parse(toks)?;
913915
wrap_macro_args(context, &parsed_args, shape)
914916
}
915917

tests/source/macro_rules.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,9 @@ macro_rules! binary {
188188
}
189189
};
190190
}
191+
192+
// #2558
193+
macro_rules! m {
194+
($x:) => {};
195+
($($foo:expr)()?) => {};
196+
}

tests/target/macro_rules.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,9 @@ macro_rules! binary {
220220
}
221221
};
222222
}
223+
224+
// #2558
225+
macro_rules! m {
226+
($x:) => {};
227+
($($foo:expr)()?) => {};
228+
}

0 commit comments

Comments
 (0)