Skip to content

Commit c6bc581

Browse files
committed
Rename things
1 parent c45b907 commit c6bc581

1 file changed

Lines changed: 32 additions & 27 deletions

File tree

  • compiler/rustc_query_impl/src

compiler/rustc_query_impl/src/job.rs

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,10 @@ pub(crate) fn find_dep_kind_root<'tcx>(
117117
/// We'll use this to remove the waiter using `QueryLatch::extract_waiter` if we're waking it up.
118118
type ResumableWaiterLocation = (QueryJobId, usize);
119119

120-
struct Waiter {
120+
/// This abstracts over non-resumable waiters which are found in `QueryJob`'s `parent` field
121+
/// and resumable waiters are in `latch` field.
122+
struct AbstractedWaiter {
123+
/// The span corresponding to the reason for why we're waiting on this query.
121124
span: Span,
122125
/// The query which we are waiting from, if none the waiter is from a compiler root.
123126
parent: Option<QueryJobId>,
@@ -126,11 +129,11 @@ struct Waiter {
126129

127130
/// Returns all the non-resumable and resumable waiters of a query.
128131
/// This is used so we can uniformly loop over both non-resumable and resumable waiters.
129-
fn waiters_of(job_map: &QueryJobMap<'_>, query: QueryJobId) -> Vec<Waiter> {
132+
fn abstracted_waiters_of(job_map: &QueryJobMap<'_>, query: QueryJobId) -> Vec<AbstractedWaiter> {
130133
let mut result = Vec::new();
131134

132135
// Add the parent which is a non-resumable waiter since it's on the same stack
133-
result.push(Waiter {
136+
result.push(AbstractedWaiter {
134137
span: job_map.span_of(query),
135138
parent: job_map.parent_of(query),
136139
resumable: None,
@@ -139,7 +142,7 @@ fn waiters_of(job_map: &QueryJobMap<'_>, query: QueryJobId) -> Vec<Waiter> {
139142
// Add the explicit waiters which use condvars and are resumable
140143
if let Some(latch) = job_map.latch_of(query) {
141144
for (i, waiter) in latch.waiters.lock().as_ref().unwrap().iter().enumerate() {
142-
result.push(Waiter {
145+
result.push(AbstractedWaiter {
143146
span: waiter.span,
144147
parent: waiter.parent,
145148
resumable: Some((query, i)),
@@ -162,11 +165,11 @@ fn cycle_check<'tcx>(
162165
visited: &mut FxHashSet<QueryJobId>,
163166
) -> ControlFlow<Option<ResumableWaiterLocation>> {
164167
if !visited.insert(query) {
165-
return if let Some(p) = stack.iter().position(|q| q.1 == query) {
168+
return if let Some(pos) = stack.iter().position(|q| q.1 == query) {
166169
// We detected a query cycle, fix up the initial span and return Some
167170

168171
// Remove previous stack entries
169-
stack.drain(0..p);
172+
stack.drain(0..pos);
170173
// Replace the span for the first query with the cycle cause
171174
stack[0].0 = span;
172175
ControlFlow::Break(None)
@@ -179,16 +182,16 @@ fn cycle_check<'tcx>(
179182
stack.push((span, query));
180183

181184
// Visit all the waiters
182-
for waiter in waiters_of(job_map, query) {
183-
let Some(waiter_query) = waiter.parent else {
185+
for abstracted_waiter in abstracted_waiters_of(job_map, query) {
186+
let Some(parent) = abstracted_waiter.parent else {
184187
// Skip waiters which are not queries
185188
continue;
186189
};
187-
if let ControlFlow::Break(maybe_waiter) =
188-
cycle_check(job_map, waiter_query, waiter.span, stack, visited)
190+
if let ControlFlow::Break(maybe_resumable) =
191+
cycle_check(job_map, parent, abstracted_waiter.span, stack, visited)
189192
{
190193
// Return the resumable waiter in `waiter.resumable` if present
191-
return ControlFlow::Break(waiter.resumable.or(maybe_waiter));
194+
return ControlFlow::Break(abstracted_waiter.resumable.or(maybe_resumable));
192195
}
193196
}
194197

@@ -212,12 +215,12 @@ fn connected_to_root<'tcx>(
212215
}
213216

214217
// Visit all the waiters
215-
for waiter in waiters_of(job_map, query) {
216-
match waiter.parent {
218+
for abstracted_waiter in abstracted_waiters_of(job_map, query) {
219+
match abstracted_waiter.parent {
217220
// This query is connected to the root
218221
None => return true,
219-
Some(waiter) => {
220-
if connected_to_root(job_map, waiter, visited) {
222+
Some(parent) => {
223+
if connected_to_root(job_map, parent, visited) {
221224
return true;
222225
}
223226
}
@@ -240,7 +243,7 @@ fn remove_cycle<'tcx>(
240243
let mut visited = FxHashSet::default();
241244
let mut stack = Vec::new();
242245
// Look for a cycle starting with the last query in `jobs`
243-
if let ControlFlow::Break(waiter) =
246+
if let ControlFlow::Break(resumable) =
244247
cycle_check(job_map, jobs.pop().unwrap(), DUMMY_SP, &mut stack, &mut visited)
245248
{
246249
// The stack is a vector of pairs of spans and queries; reverse it so that
@@ -262,7 +265,7 @@ fn remove_cycle<'tcx>(
262265

263266
struct EntryPoint {
264267
query_in_cycle: QueryJobId,
265-
waiter: Option<(Span, QueryJobId)>,
268+
query_waiting_on_cycle: Option<(Span, QueryJobId)>,
266269
}
267270

268271
// Find the queries in the cycle which are
@@ -271,11 +274,11 @@ fn remove_cycle<'tcx>(
271274
.iter()
272275
.filter_map(|&(_, query_in_cycle)| {
273276
let mut entrypoint = false;
274-
let mut found_waiter = None;
277+
let mut query_waiting_on_cycle = None;
275278

276279
// Find a direct waiter who leads to the root
277-
for waiter in waiters_of(job_map, query_in_cycle) {
278-
let Some(waiter_query) = waiter.parent else {
280+
for abstracted_waiter in abstracted_waiters_of(job_map, query_in_cycle) {
281+
let Some(parent) = abstracted_waiter.parent else {
279282
// The query in the cycle is directly connected to root.
280283
entrypoint = true;
281284
continue;
@@ -285,21 +288,21 @@ fn remove_cycle<'tcx>(
285288
// so paths to the root through the cycle itself won't count.
286289
let mut visited = FxHashSet::from_iter(stack.iter().map(|q| q.1));
287290

288-
if connected_to_root(job_map, waiter_query, &mut visited) {
289-
found_waiter = Some((waiter.span, waiter_query));
291+
if connected_to_root(job_map, parent, &mut visited) {
292+
query_waiting_on_cycle = Some((abstracted_waiter.span, parent));
290293
entrypoint = true;
291294
break;
292295
}
293296
}
294297

295-
entrypoint.then_some(EntryPoint { query_in_cycle, waiter: found_waiter })
298+
entrypoint.then_some(EntryPoint { query_in_cycle, query_waiting_on_cycle })
296299
})
297300
.collect::<Vec<EntryPoint>>();
298301

299302
// Pick an entry point, preferring ones with waiters
300303
let entry_point = entry_points
301304
.iter()
302-
.find(|entry_point| entry_point.waiter.is_some())
305+
.find(|entry_point| entry_point.query_waiting_on_cycle.is_some())
303306
.unwrap_or(&entry_points[0]);
304307

305308
// Shift the stack so that our entry point is first
@@ -309,7 +312,9 @@ fn remove_cycle<'tcx>(
309312
stack.rotate_left(pos);
310313
}
311314

312-
let usage = entry_point.waiter.map(|(span, job)| (span, job_map.frame_of(job).clone()));
315+
let usage = entry_point
316+
.query_waiting_on_cycle
317+
.map(|(span, job)| (span, job_map.frame_of(job).clone()));
313318

314319
// Create the cycle error
315320
let error = CycleError {
@@ -320,9 +325,9 @@ fn remove_cycle<'tcx>(
320325
.collect(),
321326
};
322327

323-
// We unwrap `waiter` here since there must always be one
328+
// We unwrap `resumable` here since there must always be one
324329
// edge which is resumable / waited using a query latch
325-
let (waitee_query, waiter_idx) = waiter.unwrap();
330+
let (waitee_query, waiter_idx) = resumable.unwrap();
326331

327332
// Extract the waiter we want to resume
328333
let waiter = job_map.latch_of(waitee_query).unwrap().extract_waiter(waiter_idx);

0 commit comments

Comments
 (0)