aboutsummaryrefslogtreecommitdiff
path: root/crates/mbe/src/parser.rs
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-12-28 12:26:55 +0000
committerGitHub <[email protected]>2020-12-28 12:26:55 +0000
commit99ec2f623d4446bcc0befe17a98db9c7062b8009 (patch)
tree280da6ea56a904e43b4edc57974e29d55daffcb8 /crates/mbe/src/parser.rs
parent86f947c1fb61c17140653f43e5f6e3e5c0ed057d (diff)
parentb5c29af02a88d0354ae1cbdabb41d481132f476e (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.rs11
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;