mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
// Tests that `?` is a Kleene op and not a macro separator in the 2015 edition.
 | 
						|
 | 
						|
//@ edition:2015
 | 
						|
 | 
						|
macro_rules! foo {
 | 
						|
    ($(a)?) => {};
 | 
						|
}
 | 
						|
 | 
						|
// The Kleene op `?` does not admit a separator before it.
 | 
						|
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!(*);
 | 
						|
}
 |