@@ -4,10 +4,9 @@ use std::ops::Index;
4
4
use rustc_data_structures:: captures:: Captures ;
5
5
use rustc_data_structures:: fx:: FxIndexMap ;
6
6
use rustc_index:: { IndexSlice , IndexVec } ;
7
- use rustc_middle:: infer:: MemberConstraint ;
8
7
use rustc_middle:: ty:: { self , Ty } ;
9
8
use rustc_span:: Span ;
10
- use tracing:: debug ;
9
+ use tracing:: instrument ;
11
10
12
11
/// Compactly stores a set of `R0 member of [R1...Rn]` constraints,
13
12
/// indexed by the region `R0`.
23
22
/// Stores the data about each `R0 member of [R1..Rn]` constraint.
24
23
/// These are organized into a linked list, so each constraint
25
24
/// contains the index of the next constraint with the same `R0`.
26
- constraints : IndexVec < NllMemberConstraintIndex , NllMemberConstraint < ' tcx > > ,
25
+ constraints : IndexVec < NllMemberConstraintIndex , MemberConstraint < ' tcx > > ,
27
26
28
27
/// Stores the `R1..Rn` regions for *all* sets. For any given
29
28
/// constraint, we keep two indices so that we can pull out a
33
32
34
33
/// Represents a `R0 member of [R1..Rn]` constraint
35
34
#[ derive( Debug ) ]
36
- pub ( crate ) struct NllMemberConstraint < ' tcx > {
35
+ pub ( crate ) struct MemberConstraint < ' tcx > {
37
36
next_constraint : Option < NllMemberConstraintIndex > ,
38
37
39
38
/// The span where the hidden type was instantiated.
@@ -71,36 +70,29 @@ impl Default for MemberConstraintSet<'_, ty::RegionVid> {
71
70
72
71
impl < ' tcx > MemberConstraintSet < ' tcx , ty:: RegionVid > {
73
72
/// Pushes a member constraint into the set.
74
- ///
75
- /// The input member constraint `m_c` is in the form produced by
76
- /// the `rustc_middle::infer` code.
77
- ///
78
- /// The `to_region_vid` callback fn is used to convert the regions
79
- /// within into `RegionVid` format -- it typically consults the
80
- /// `UniversalRegions` data structure that is known to the caller
81
- /// (but which this code is unaware of).
82
- pub ( crate ) fn push_constraint (
73
+ #[ instrument( level = "debug" , skip( self ) ) ]
74
+ pub ( crate ) fn add_member_constraint (
83
75
& mut self ,
84
- m_c : & MemberConstraint < ' tcx > ,
85
- mut to_region_vid : impl FnMut ( ty:: Region < ' tcx > ) -> ty:: RegionVid ,
76
+ key : ty:: OpaqueTypeKey < ' tcx > ,
77
+ hidden_ty : Ty < ' tcx > ,
78
+ definition_span : Span ,
79
+ member_region_vid : ty:: RegionVid ,
80
+ choice_regions : & [ ty:: RegionVid ] ,
86
81
) {
87
- debug ! ( "push_constraint(m_c={:?})" , m_c) ;
88
- let member_region_vid: ty:: RegionVid = to_region_vid ( m_c. member_region ) ;
89
82
let next_constraint = self . first_constraints . get ( & member_region_vid) . cloned ( ) ;
90
83
let start_index = self . choice_regions . len ( ) ;
91
- let end_index = start_index + m_c . choice_regions . len ( ) ;
92
- debug ! ( "push_constraint: member_region_vid={:?}" , member_region_vid ) ;
93
- let constraint_index = self . constraints . push ( NllMemberConstraint {
84
+ self . choice_regions . extend ( choice_regions ) ;
85
+ let end_index = self . choice_regions . len ( ) ;
86
+ let constraint_index = self . constraints . push ( MemberConstraint {
94
87
next_constraint,
95
88
member_region_vid,
96
- definition_span : m_c . definition_span ,
97
- hidden_ty : m_c . hidden_ty ,
98
- key : m_c . key ,
89
+ definition_span,
90
+ hidden_ty,
91
+ key,
99
92
start_index,
100
93
end_index,
101
94
} ) ;
102
95
self . first_constraints . insert ( member_region_vid, constraint_index) ;
103
- self . choice_regions . extend ( m_c. choice_regions . iter ( ) . map ( |& r| to_region_vid ( r) ) ) ;
104
96
}
105
97
}
106
98
@@ -182,7 +174,7 @@ where
182
174
/// R0 member of [R1..Rn]
183
175
/// ```
184
176
pub ( crate ) fn choice_regions ( & self , pci : NllMemberConstraintIndex ) -> & [ ty:: RegionVid ] {
185
- let NllMemberConstraint { start_index, end_index, .. } = & self . constraints [ pci] ;
177
+ let MemberConstraint { start_index, end_index, .. } = & self . constraints [ pci] ;
186
178
& self . choice_regions [ * start_index..* end_index]
187
179
}
188
180
}
@@ -191,9 +183,9 @@ impl<'tcx, R> Index<NllMemberConstraintIndex> for MemberConstraintSet<'tcx, R>
191
183
where
192
184
R : Copy + Eq ,
193
185
{
194
- type Output = NllMemberConstraint < ' tcx > ;
186
+ type Output = MemberConstraint < ' tcx > ;
195
187
196
- fn index ( & self , i : NllMemberConstraintIndex ) -> & NllMemberConstraint < ' tcx > {
188
+ fn index ( & self , i : NllMemberConstraintIndex ) -> & MemberConstraint < ' tcx > {
197
189
& self . constraints [ i]
198
190
}
199
191
}
@@ -215,7 +207,7 @@ where
215
207
/// target_list: A -> B -> C -> D -> E -> F -> (None)
216
208
/// ```
217
209
fn append_list (
218
- constraints : & mut IndexSlice < NllMemberConstraintIndex , NllMemberConstraint < ' _ > > ,
210
+ constraints : & mut IndexSlice < NllMemberConstraintIndex , MemberConstraint < ' _ > > ,
219
211
target_list : NllMemberConstraintIndex ,
220
212
source_list : NllMemberConstraintIndex ,
221
213
) {
0 commit comments