diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-12-28 12:26:55 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-28 12:26:55 +0000 |
commit | 99ec2f623d4446bcc0befe17a98db9c7062b8009 (patch) | |
tree | 280da6ea56a904e43b4edc57974e29d55daffcb8 /crates/mbe/src/parser.rs | |
parent | 86f947c1fb61c17140653f43e5f6e3e5c0ed057d (diff) | |
parent | b5c29af02a88d0354ae1cbdabb41d481132f476e (diff) |
Merge #7059
7059: Special case $_ in meta var instead of treat it as ident in mbe r=lnicola a=edwin0cheng
In #6929, we treat '_' as an ident but rustc is only allow it in some special places (e.g. meta var in mbe , type, pat etc).
This PR rollback that and we only make '$_' works in meta var matching.
Fixes #7056
Co-authored-by: Edwin Cheng <[email protected]>
Diffstat (limited to 'crates/mbe/src/parser.rs')
-rw-r--r-- | crates/mbe/src/parser.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/crates/mbe/src/parser.rs b/crates/mbe/src/parser.rs index c3fdd4040..d681905f5 100644 --- a/crates/mbe/src/parser.rs +++ b/crates/mbe/src/parser.rs | |||
@@ -101,8 +101,15 @@ fn next_op<'a>( | |||
101 | Op::Repeat { subtree, separator, kind } | 101 | Op::Repeat { subtree, separator, kind } |
102 | } | 102 | } |
103 | tt::TokenTree::Leaf(leaf) => match leaf { | 103 | tt::TokenTree::Leaf(leaf) => match leaf { |
104 | tt::Leaf::Punct(_) => { | 104 | tt::Leaf::Punct(punct) => { |
105 | return Err(ExpandError::UnexpectedToken); | 105 | static UNDERSCORE: SmolStr = SmolStr::new_inline("_"); |
106 | |||
107 | if punct.char != '_' { | ||
108 | return Err(ExpandError::UnexpectedToken); | ||
109 | } | ||
110 | let name = &UNDERSCORE; | ||
111 | let kind = eat_fragment_kind(src, mode)?; | ||
112 | Op::Var { name, kind } | ||
106 | } | 113 | } |
107 | tt::Leaf::Ident(ident) => { | 114 | tt::Leaf::Ident(ident) => { |
108 | let name = &ident.text; | 115 | let name = &ident.text; |