1
1
//! Validation of matches.
2
2
//!
3
- //! This module provides lowering from [hir_def::expr ::Pat] to [self::Pat] and match
3
+ //! This module provides lowering from [hir_def::hir ::Pat] to [self::Pat] and match
4
4
//! checking algorithm.
5
5
//!
6
6
//! It is modeled on the rustc module `rustc_mir_build::thir::pattern`.
@@ -12,7 +12,7 @@ pub(crate) mod usefulness;
12
12
13
13
use chalk_ir:: Mutability ;
14
14
use hir_def:: {
15
- adt :: VariantData , body :: Body , expr :: PatId , AdtId , EnumVariantId , LocalFieldId , VariantId ,
15
+ body :: Body , data :: adt :: VariantData , hir :: PatId , AdtId , EnumVariantId , LocalFieldId , VariantId ,
16
16
} ;
17
17
use hir_expand:: name:: Name ;
18
18
use stdx:: { always, never} ;
@@ -125,15 +125,15 @@ impl<'a> PatCtxt<'a> {
125
125
let variant = self . infer . variant_resolution_for_pat ( pat) ;
126
126
127
127
let kind = match self . body [ pat] {
128
- hir_def:: expr :: Pat :: Wild => PatKind :: Wild ,
128
+ hir_def:: hir :: Pat :: Wild => PatKind :: Wild ,
129
129
130
- hir_def:: expr :: Pat :: Lit ( expr) => self . lower_lit ( expr) ,
130
+ hir_def:: hir :: Pat :: Lit ( expr) => self . lower_lit ( expr) ,
131
131
132
- hir_def:: expr :: Pat :: Path ( ref path) => {
132
+ hir_def:: hir :: Pat :: Path ( ref path) => {
133
133
return self . lower_path ( pat, path) ;
134
134
}
135
135
136
- hir_def:: expr :: Pat :: Tuple { ref args, ellipsis } => {
136
+ hir_def:: hir :: Pat :: Tuple { ref args, ellipsis } => {
137
137
let arity = match * ty. kind ( Interner ) {
138
138
TyKind :: Tuple ( arity, _) => arity,
139
139
_ => {
@@ -146,7 +146,7 @@ impl<'a> PatCtxt<'a> {
146
146
PatKind :: Leaf { subpatterns }
147
147
}
148
148
149
- hir_def:: expr :: Pat :: Bind { id, subpat, .. } => {
149
+ hir_def:: hir :: Pat :: Bind { id, subpat, .. } => {
150
150
let bm = self . infer . pat_binding_modes [ & pat] ;
151
151
let name = & self . body . bindings [ id] . name ;
152
152
match ( bm, ty. kind ( Interner ) ) {
@@ -161,13 +161,13 @@ impl<'a> PatCtxt<'a> {
161
161
PatKind :: Binding { name : name. clone ( ) , subpattern : self . lower_opt_pattern ( subpat) }
162
162
}
163
163
164
- hir_def:: expr :: Pat :: TupleStruct { ref args, ellipsis, .. } if variant. is_some ( ) => {
164
+ hir_def:: hir :: Pat :: TupleStruct { ref args, ellipsis, .. } if variant. is_some ( ) => {
165
165
let expected_len = variant. unwrap ( ) . variant_data ( self . db . upcast ( ) ) . fields ( ) . len ( ) ;
166
166
let subpatterns = self . lower_tuple_subpats ( args, expected_len, ellipsis) ;
167
167
self . lower_variant_or_leaf ( pat, ty, subpatterns)
168
168
}
169
169
170
- hir_def:: expr :: Pat :: Record { ref args, .. } if variant. is_some ( ) => {
170
+ hir_def:: hir :: Pat :: Record { ref args, .. } if variant. is_some ( ) => {
171
171
let variant_data = variant. unwrap ( ) . variant_data ( self . db . upcast ( ) ) ;
172
172
let subpatterns = args
173
173
. iter ( )
@@ -187,12 +187,12 @@ impl<'a> PatCtxt<'a> {
187
187
}
188
188
}
189
189
}
190
- hir_def:: expr :: Pat :: TupleStruct { .. } | hir_def:: expr :: Pat :: Record { .. } => {
190
+ hir_def:: hir :: Pat :: TupleStruct { .. } | hir_def:: hir :: Pat :: Record { .. } => {
191
191
self . errors . push ( PatternError :: UnresolvedVariant ) ;
192
192
PatKind :: Wild
193
193
}
194
194
195
- hir_def:: expr :: Pat :: Or ( ref pats) => PatKind :: Or { pats : self . lower_patterns ( pats) } ,
195
+ hir_def:: hir :: Pat :: Or ( ref pats) => PatKind :: Or { pats : self . lower_patterns ( pats) } ,
196
196
197
197
_ => {
198
198
self . errors . push ( PatternError :: Unimplemented ) ;
@@ -279,8 +279,8 @@ impl<'a> PatCtxt<'a> {
279
279
}
280
280
}
281
281
282
- fn lower_lit ( & mut self , expr : hir_def:: expr :: ExprId ) -> PatKind {
283
- use hir_def:: expr :: { Expr , Literal :: Bool } ;
282
+ fn lower_lit ( & mut self , expr : hir_def:: hir :: ExprId ) -> PatKind {
283
+ use hir_def:: hir :: { Expr , Literal :: Bool } ;
284
284
285
285
match self . body [ expr] {
286
286
Expr :: Literal ( Bool ( value) ) => PatKind :: LiteralBool { value } ,
0 commit comments