2019-05-18 01:24:56 -05:00
|
|
|
// Tests that `?` is a Kleene op and not a macro separator in the 2015 edition.
|
|
|
|
|
|
|
|
// edition:2015
|
|
|
|
|
|
|
|
macro_rules! foo {
|
|
|
|
($(a)?) => {};
|
|
|
|
}
|
|
|
|
|
2019-05-21 22:52:47 -05:00
|
|
|
// The Kleene op `?` does not admit a separator before it.
|
2019-05-18 01:24:56 -05:00
|
|
|
macro_rules! baz {
|
|
|
|
($(a),?) => {}; //~ERROR the `?` macro repetition operator
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! barplus {
|
|
|
|
($(a)?+) => {}; // ok. matches "a+" and "+"
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! barstar {
|
|
|
|
($(a)?*) => {}; // ok. matches "a*" and "*"
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn main() {
|
|
|
|
foo!();
|
|
|
|
foo!(a);
|
|
|
|
foo!(a?); //~ ERROR no rules expected the token `?`
|
|
|
|
foo!(a?a); //~ ERROR no rules expected the token `?`
|
|
|
|
foo!(a?a?a); //~ ERROR no rules expected the token `?`
|
|
|
|
|
|
|
|
barplus!(); //~ERROR unexpected end of macro invocation
|
|
|
|
barplus!(a); //~ERROR unexpected end of macro invocation
|
|
|
|
barplus!(a?); //~ ERROR no rules expected the token `?`
|
|
|
|
barplus!(a?a); //~ ERROR no rules expected the token `?`
|
|
|
|
barplus!(a+);
|
|
|
|
barplus!(+);
|
|
|
|
|
|
|
|
barstar!(); //~ERROR unexpected end of macro invocation
|
|
|
|
barstar!(a); //~ERROR unexpected end of macro invocation
|
|
|
|
barstar!(a?); //~ ERROR no rules expected the token `?`
|
|
|
|
barstar!(a?a); //~ ERROR no rules expected the token `?`
|
|
|
|
barstar!(a*);
|
|
|
|
barstar!(*);
|
|
|
|
}
|