Fix and test edge cases of _ as ident
This commit is contained in:
@@ -710,7 +710,6 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
|
||||
let tt_result = match kind {
|
||||
"ident" => input
|
||||
.expect_ident()
|
||||
.and_then(|ident| if ident.text == "_" { Err(()) } else { Ok(ident) })
|
||||
.map(|ident| Some(tt::Leaf::from(ident.clone()).into()))
|
||||
.map_err(|()| err!("expected ident")),
|
||||
"tt" => input.expect_tt().map(Some).map_err(|()| err!()),
|
||||
@@ -763,7 +762,7 @@ impl<'a> TtIter<'a> {
|
||||
fn expect_separator(&mut self, separator: &Separator, idx: usize) -> bool {
|
||||
let mut fork = self.clone();
|
||||
let ok = match separator {
|
||||
Separator::Ident(lhs) if idx == 0 => match fork.expect_ident() {
|
||||
Separator::Ident(lhs) if idx == 0 => match fork.expect_ident_or_underscore() {
|
||||
Ok(rhs) => rhs.text == lhs.text,
|
||||
_ => false,
|
||||
},
|
||||
@@ -853,7 +852,7 @@ impl<'a> TtIter<'a> {
|
||||
if punct.char != '\'' {
|
||||
return Err(());
|
||||
}
|
||||
let ident = self.expect_ident()?;
|
||||
let ident = self.expect_ident_or_underscore()?;
|
||||
|
||||
Ok(tt::Subtree {
|
||||
delimiter: None,
|
||||
|
||||
Reference in New Issue
Block a user