@@ -26,14 +26,16 @@ pub struct DeconstructedPat<'p, Cx: TypeCx> {
2626 ctor : Constructor < Cx > ,
2727 fields : & ' p [ DeconstructedPat < ' p , Cx > ] ,
2828 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 > ,
3032 /// Whether removing this arm would change the behavior of the match expression.
3133 useful : Cell < bool > ,
3234}
3335
3436impl < ' 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 ) }
3739 }
3840
3941 pub fn new (
@@ -42,7 +44,7 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
4244 ty : Cx :: Ty ,
4345 data : Cx :: PatData ,
4446 ) -> Self {
45- DeconstructedPat { ctor, fields, ty, data, useful : Cell :: new ( false ) }
47+ DeconstructedPat { ctor, fields, ty, data : Some ( data ) , useful : Cell :: new ( false ) }
4648 }
4749
4850 pub ( crate ) fn is_or_pat ( & self ) -> bool {
@@ -63,8 +65,10 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
6365 pub fn ty ( & self ) -> Cx :: Ty {
6466 self . ty
6567 }
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 ( )
6872 }
6973
7074 pub fn iter_fields < ' a > (
@@ -83,7 +87,7 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
8387 let wildcard_sub_tys = || {
8488 let tys = pcx. ctor_sub_tys ( other_ctor) ;
8589 tys. iter ( )
86- . map ( |ty| DeconstructedPat :: wildcard ( * ty, Cx :: PatData :: default ( ) ) )
90+ . map ( |ty| DeconstructedPat :: wildcard ( * ty) )
8791 . map ( |pat| pcx. mcx . wildcard_arena . alloc ( pat) as & _ )
8892 . collect ( )
8993 } ;
0 commit comments