2020-11-11 00:00:53 +00:00
|
|
|
// run-pass
|
|
|
|
// edition:2021
|
|
|
|
|
|
|
|
use Foo::*;
|
|
|
|
|
2021-04-29 01:51:32 +00:00
|
|
|
#[allow(dead_code)]
|
2020-11-11 00:00:53 +00:00
|
|
|
#[derive(Eq, PartialEq, Debug)]
|
|
|
|
enum Foo {
|
|
|
|
A(u64),
|
|
|
|
B(u64),
|
|
|
|
C,
|
|
|
|
D,
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! foo {
|
|
|
|
($orpat:pat, $val:expr) => {
|
|
|
|
match $val {
|
|
|
|
x @ ($orpat) => x, // leading vert would not be allowed in $orpat
|
|
|
|
_ => B(0xDEADBEEFu64),
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! bar {
|
|
|
|
($orpat:pat, $val:expr) => {
|
|
|
|
match $val {
|
|
|
|
$orpat => 42, // leading vert allowed here
|
|
|
|
_ => 0xDEADBEEFu64,
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
// Test or-pattern.
|
|
|
|
let y = foo!(A(_)|B(_), A(32));
|
|
|
|
assert_eq!(y, A(32));
|
|
|
|
|
|
|
|
// Leading vert in or-pattern.
|
|
|
|
let y = bar!(|C| D, C);
|
|
|
|
assert_eq!(y, 42u64);
|
|
|
|
}
|