@@ -26,14 +26,16 @@ pub struct DeconstructedPat<'p, Cx: TypeCx> {
26
26
ctor : Constructor < Cx > ,
27
27
fields : & ' p [ DeconstructedPat < ' p , Cx > ] ,
28
28
ty : Cx :: Ty ,
29
- data : Cx :: PatData ,
29
+ /// Extra data to store in a pattern. `None` if the pattern is a wildcard that does not
30
+ /// correspond to a user-supplied pattern.
31
+ data : Option < Cx :: PatData > ,
30
32
/// Whether removing this arm would change the behavior of the match expression.
31
33
useful : Cell < bool > ,
32
34
}
33
35
34
36
impl < ' p , Cx : TypeCx > DeconstructedPat < ' p , Cx > {
35
- pub fn wildcard ( ty : Cx :: Ty , data : Cx :: PatData ) -> Self {
36
- Self :: new ( Wildcard , & [ ] , ty, data)
37
+ pub fn wildcard ( ty : Cx :: Ty ) -> Self {
38
+ DeconstructedPat { ctor : Wildcard , fields : & [ ] , ty, data : None , useful : Cell :: new ( false ) }
37
39
}
38
40
39
41
pub fn new (
@@ -42,7 +44,7 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
42
44
ty : Cx :: Ty ,
43
45
data : Cx :: PatData ,
44
46
) -> Self {
45
- DeconstructedPat { ctor, fields, ty, data, useful : Cell :: new ( false ) }
47
+ DeconstructedPat { ctor, fields, ty, data : Some ( data ) , useful : Cell :: new ( false ) }
46
48
}
47
49
48
50
pub ( crate ) fn is_or_pat ( & self ) -> bool {
@@ -63,8 +65,10 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
63
65
pub fn ty ( & self ) -> Cx :: Ty {
64
66
self . ty
65
67
}
66
- pub fn data ( & self ) -> & Cx :: PatData {
67
- & self . data
68
+ /// Returns the extra data stored in a pattern. Returns `None` if the pattern is a wildcard that
69
+ /// does not correspond to a user-supplied pattern.
70
+ pub fn data ( & self ) -> Option < & Cx :: PatData > {
71
+ self . data . as_ref ( )
68
72
}
69
73
70
74
pub fn iter_fields < ' a > (
@@ -83,7 +87,7 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
83
87
let wildcard_sub_tys = || {
84
88
let tys = pcx. ctor_sub_tys ( other_ctor) ;
85
89
tys. iter ( )
86
- . map ( |ty| DeconstructedPat :: wildcard ( * ty, Cx :: PatData :: default ( ) ) )
90
+ . map ( |ty| DeconstructedPat :: wildcard ( * ty) )
87
91
. map ( |pat| pcx. mcx . wildcard_arena . alloc ( pat) as & _ )
88
92
. collect ( )
89
93
} ;
0 commit comments