Skip to content

Commit

Permalink
Add syntactic test for rest patterns.
Browse files Browse the repository at this point in the history
  • Loading branch information
Centril committed Jul 29, 2019
1 parent 8b94e9e commit 15bc63e
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions src/test/ui/pattern/rest-pat-syntactic.rs
Original file line number Diff line number Diff line change
@@ -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 @ ..
=> {}
}
}

0 comments on commit 15bc63e

Please sign in to comment.