@@ -13,7 +13,14 @@ macro_rules! match_or_else {
1313 ( [ $e: expr] $( $arm_pat: pat => $arm_body: expr) ,* ; $or_else: expr) => {
1414 match $e {
1515 $( $arm_pat => $arm_body, ) *
16- ref x @ _ => $or_else( x) ,
16+ _ => $or_else,
17+ }
18+ } ;
19+
20+ ( [ $e: expr] $( $arm_pat: pat => $arm_body: expr) ,* ; $or_else_var: ident => $or_else: expr) => {
21+ match $e {
22+ $( $arm_pat => $arm_body, ) *
23+ ref $or_else_var @ _ => $or_else,
1724 }
1825 } ;
1926}
@@ -22,11 +29,11 @@ macro_rules! match_or_else {
2229macro_rules! expect {
2330 ( [ $e: expr] $arm_pat: pat => $arm_body: expr) => {
2431 $crate:: match_or_else!( [ $e] $arm_pat => $arm_body;
25- |x| panic!( "expected {}, got {:?}" , stringify!( $arm_pat) , x) )
32+ x => panic!( "expected {}, got {:?}" , stringify!( $arm_pat) , x) )
2633 } ;
2734 ( [ $e: expr] $( $arm_pat: pat => $arm_body: expr) ,* ) => {
2835 $crate:: match_or_else!( [ $e] $( $arm_pat => $arm_body) ,* ;
29- |x| panic!( "expected one of: {}, got {:?}" , stringify!( $( $arm_pat) ,* ) , x) )
36+ x => panic!( "expected one of: {}, got {:?}" , stringify!( $( $arm_pat) ,* ) , x) )
3037 } ;
3138}
3239
@@ -35,6 +42,28 @@ macro_rules! unpack {
3542 ( [ $e: expr] $enum_: ident :: $variant: ident ( $( $arg: ident) ,* ) ) => {
3643 let ( $( $arg, ) * ) = $crate:: expect!( [ $e] $enum_:: $variant( $( $arg) ,* ) => ( $( $arg, ) * ) ) ;
3744 } ;
45+
46+ (
47+ [ $e: expr]
48+ $enum_: ident :: $variant: ident ( $( $arg: ident) ,* ) ;
49+ $or_else: expr
50+ ) => {
51+ let ( $( $arg, ) * ) = $crate:: match_or_else!(
52+ [ $e] $enum_:: $variant( $( $arg) ,* ) => ( $( $arg, ) * ) ;
53+ $or_else
54+ ) ;
55+ } ;
56+
57+ (
58+ [ $e: expr]
59+ $enum_: ident :: $variant: ident ( $( $arg: ident) ,* ) ;
60+ $or_else_var: ident => $or_else: expr
61+ ) => {
62+ let ( $( $arg, ) * ) = $crate:: match_or_else!(
63+ [ $e] $enum_:: $variant( $( $arg) ,* ) => ( $( $arg, ) * ) ;
64+ $or_else_var => $or_else
65+ ) ;
66+ } ;
3867}
3968
4069#[ macro_export]
0 commit comments