Add syntactic test for rest patterns.
This commit is contained in:
parent
8b94e9e918
commit
15bc63e8bf
1 changed files with 70 additions and 0 deletions
70
src/test/ui/pattern/rest-pat-syntactic.rs
Normal file
70
src/test/ui/pattern/rest-pat-syntactic.rs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
// Here we test that `..` is allowed in all pattern locations *syntactically*.
|
||||
// The semantic test is in `rest-pat-semantic-disallowed.rs`.
|
||||
|
||||
// check-pass
|
||||
|
||||
fn main() {}
|
||||
|
||||
macro_rules! accept_pat {
|
||||
($p:pat) => {}
|
||||
}
|
||||
|
||||
accept_pat!(..);
|
||||
|
||||
#[cfg(FALSE)]
|
||||
fn rest_patterns() {
|
||||
// Top level:
|
||||
fn foo(..: u8) {}
|
||||
let ..;
|
||||
|
||||
// Box patterns:
|
||||
let box ..;
|
||||
|
||||
// In or-patterns:
|
||||
match x {
|
||||
.. | .. => {}
|
||||
}
|
||||
|
||||
// Ref patterns:
|
||||
let &..;
|
||||
let &mut ..;
|
||||
|
||||
// Ident patterns:
|
||||
let x @ ..;
|
||||
let ref x @ ..;
|
||||
let ref mut x @ ..;
|
||||
|
||||
// Tuple:
|
||||
let (..); // This is interpreted as a tuple pattern, not a parenthesis one.
|
||||
let (..,); // Allowing trailing comma.
|
||||
let (.., .., ..); // Duplicates also.
|
||||
let (.., P, ..); // Including with things in between.
|
||||
|
||||
// Tuple struct (same idea as for tuple patterns):
|
||||
let A(..);
|
||||
let A(..,);
|
||||
let A(.., .., ..);
|
||||
let A(.., P, ..);
|
||||
|
||||
// Array/Slice (like with tuple patterns):
|
||||
let [..];
|
||||
let [..,];
|
||||
let [.., .., ..];
|
||||
let [.., P, ..];
|
||||
|
||||
// Random walk to guard against special casing:
|
||||
match x {
|
||||
.. |
|
||||
[
|
||||
(
|
||||
box ..,
|
||||
&(..),
|
||||
&mut ..,
|
||||
x @ ..
|
||||
),
|
||||
ref x @ ..,
|
||||
] |
|
||||
ref mut x @ ..
|
||||
=> {}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue