[RFC-3086] Restrict the parsing of count
This commit is contained in:
parent
d4a881e143
commit
6395dc2cde
@ -93,7 +93,17 @@ fn parse_count<'sess>(
|
||||
span: Span,
|
||||
) -> PResult<'sess, MetaVarExpr> {
|
||||
let ident = parse_ident(iter, sess, span)?;
|
||||
let depth = if try_eat_comma(iter) { Some(parse_depth(iter, sess, span)?) } else { None };
|
||||
let depth = if try_eat_comma(iter) {
|
||||
if iter.look_ahead(0).is_none() {
|
||||
return Err(sess.span_diagnostic.struct_span_err(
|
||||
span,
|
||||
"`count` followed by a comma must have an associated index indicating its depth",
|
||||
));
|
||||
}
|
||||
Some(parse_depth(iter, sess, span)?)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
Ok(MetaVarExpr::Count(ident, depth))
|
||||
}
|
||||
|
||||
|
14
tests/ui/macros/rfc-3086-metavar-expr/issue-111904.rs
Normal file
14
tests/ui/macros/rfc-3086-metavar-expr/issue-111904.rs
Normal file
@ -0,0 +1,14 @@
|
||||
#![feature(macro_metavar_expr)]
|
||||
|
||||
macro_rules! foo {
|
||||
( $( $($t:ident),* );* ) => { ${count(t,)} }
|
||||
//~^ ERROR `count` followed by a comma must have an associated
|
||||
//~| ERROR expected expression, found `$`
|
||||
}
|
||||
|
||||
fn test() {
|
||||
foo!(a, a; b, b);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
19
tests/ui/macros/rfc-3086-metavar-expr/issue-111904.stderr
Normal file
19
tests/ui/macros/rfc-3086-metavar-expr/issue-111904.stderr
Normal file
@ -0,0 +1,19 @@
|
||||
error: `count` followed by a comma must have an associated index indicating its depth
|
||||
--> $DIR/issue-111904.rs:4:37
|
||||
|
|
||||
LL | ( $( $($t:ident),* );* ) => { ${count(t,)} }
|
||||
| ^^^^^
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/issue-111904.rs:4:35
|
||||
|
|
||||
LL | ( $( $($t:ident),* );* ) => { ${count(t,)} }
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | foo!(a, a; b, b);
|
||||
| ---------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
Loading…
Reference in New Issue
Block a user