Skip to content

Commit 435db9b

Browse files
committed
Use RPITIT for Successors and Predecessors traits
Now with RPITIT instead of GAT!
1 parent e8d2221 commit 435db9b

File tree

8 files changed

+14
-46
lines changed

8 files changed

+14
-46
lines changed

compiler/rustc_borrowck/src/constraints/graph.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,7 @@ impl<'s, 'tcx, D: ConstraintGraphDirection> graph::DirectedGraph for RegionGraph
223223
}
224224

225225
impl<'s, 'tcx, D: ConstraintGraphDirection> graph::Successors for RegionGraph<'s, 'tcx, D> {
226-
type Successors<'g> = Successors<'s, 'tcx, D> where Self: 'g;
227-
228-
fn successors(&self, node: Self::Node) -> Self::Successors<'_> {
226+
fn successors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node> {
229227
self.outgoing_regions(node)
230228
}
231229
}

compiler/rustc_data_structures/src/graph/mod.rs

+2-10
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,11 @@ pub trait StartNode: DirectedGraph {
2525
}
2626

2727
pub trait Successors: DirectedGraph {
28-
type Successors<'g>: Iterator<Item = Self::Node>
29-
where
30-
Self: 'g;
31-
32-
fn successors(&self, node: Self::Node) -> Self::Successors<'_>;
28+
fn successors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node>;
3329
}
3430

3531
pub trait Predecessors: DirectedGraph {
36-
type Predecessors<'g>: Iterator<Item = Self::Node>
37-
where
38-
Self: 'g;
39-
40-
fn predecessors(&self, node: Self::Node) -> Self::Predecessors<'_>;
32+
fn predecessors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node>;
4133
}
4234

4335
/// Alias for [`DirectedGraph`] + [`StartNode`] + [`Predecessors`] + [`Successors`].

compiler/rustc_data_structures/src/graph/reference.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,13 @@ impl<'graph, G: StartNode> StartNode for &'graph G {
1515
}
1616

1717
impl<'graph, G: Successors> Successors for &'graph G {
18-
type Successors<'g> = G::Successors<'g> where 'graph: 'g;
19-
20-
fn successors(&self, node: Self::Node) -> Self::Successors<'_> {
18+
fn successors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node> {
2119
(**self).successors(node)
2220
}
2321
}
2422

2523
impl<'graph, G: Predecessors> Predecessors for &'graph G {
26-
type Predecessors<'g> = G::Predecessors<'g> where 'graph: 'g;
27-
28-
fn predecessors(&self, node: Self::Node) -> Self::Predecessors<'_> {
24+
fn predecessors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node> {
2925
(**self).predecessors(node)
3026
}
3127
}

compiler/rustc_data_structures/src/graph/scc/mod.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,7 @@ impl<N: Idx, S: Idx + Ord> NumEdges for Sccs<N, S> {
104104
}
105105

106106
impl<N: Idx, S: Idx + Ord> Successors for Sccs<N, S> {
107-
type Successors<'g> = std::iter::Cloned<std::slice::Iter<'g, S>>;
108-
109-
fn successors(&self, node: S) -> Self::Successors<'_> {
107+
fn successors(&self, node: S) -> impl Iterator<Item = Self::Node> {
110108
self.successors(node).iter().cloned()
111109
}
112110
}

compiler/rustc_data_structures/src/graph/tests.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
use crate::fx::FxHashMap;
22
use std::cmp::max;
3-
use std::iter;
4-
use std::slice;
53

64
use super::*;
75

@@ -49,17 +47,13 @@ impl StartNode for TestGraph {
4947
}
5048

5149
impl Predecessors for TestGraph {
52-
type Predecessors<'g> = iter::Cloned<slice::Iter<'g, usize>>;
53-
54-
fn predecessors(&self, node: usize) -> Self::Predecessors<'_> {
50+
fn predecessors(&self, node: usize) -> impl Iterator<Item = Self::Node> {
5551
self.predecessors[&node].iter().cloned()
5652
}
5753
}
5854

5955
impl Successors for TestGraph {
60-
type Successors<'g> = iter::Cloned<slice::Iter<'g, usize>>;
61-
62-
fn successors(&self, node: usize) -> Self::Successors<'_> {
56+
fn successors(&self, node: usize) -> impl Iterator<Item = Self::Node> {
6357
self.successors[&node].iter().cloned()
6458
}
6559
}

compiler/rustc_data_structures/src/graph/vec_graph/mod.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,7 @@ impl<N: Idx> NumEdges for VecGraph<N> {
9393
}
9494

9595
impl<N: Idx + Ord> Successors for VecGraph<N> {
96-
type Successors<'g> = std::iter::Cloned<std::slice::Iter<'g, N>>;
97-
98-
fn successors(&self, node: N) -> Self::Successors<'_> {
96+
fn successors(&self, node: N) -> impl Iterator<Item = Self::Node> {
9997
self.successors(node).iter().cloned()
10098
}
10199
}

compiler/rustc_middle/src/mir/basic_blocks.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::mir::traversal::Postorder;
2-
use crate::mir::{BasicBlock, BasicBlockData, Successors, Terminator, TerminatorKind, START_BLOCK};
2+
use crate::mir::{BasicBlock, BasicBlockData, Terminator, TerminatorKind, START_BLOCK};
33

44
use rustc_data_structures::fx::FxHashMap;
55
use rustc_data_structures::graph;
@@ -156,19 +156,15 @@ impl<'tcx> graph::StartNode for BasicBlocks<'tcx> {
156156
}
157157

158158
impl<'tcx> graph::Successors for BasicBlocks<'tcx> {
159-
type Successors<'b> = Successors<'b> where 'tcx: 'b;
160-
161159
#[inline]
162-
fn successors(&self, node: Self::Node) -> Self::Successors<'_> {
160+
fn successors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node> {
163161
self.basic_blocks[node].terminator().successors()
164162
}
165163
}
166164

167165
impl<'tcx> graph::Predecessors for BasicBlocks<'tcx> {
168-
type Predecessors<'b> = std::iter::Copied<std::slice::Iter<'b, BasicBlock>> where 'tcx: 'b;
169-
170166
#[inline]
171-
fn predecessors(&self, node: Self::Node) -> Self::Predecessors<'_> {
167+
fn predecessors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node> {
172168
self.predecessors()[node].iter().copied()
173169
}
174170
}

compiler/rustc_mir_transform/src/coverage/graph.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -209,19 +209,15 @@ impl graph::StartNode for CoverageGraph {
209209
}
210210

211211
impl graph::Successors for CoverageGraph {
212-
type Successors<'g> = std::iter::Cloned<std::slice::Iter<'g, BasicCoverageBlock>>;
213-
214212
#[inline]
215-
fn successors(&self, node: Self::Node) -> Self::Successors<'_> {
213+
fn successors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node> {
216214
self.successors[node].iter().cloned()
217215
}
218216
}
219217

220218
impl graph::Predecessors for CoverageGraph {
221-
type Predecessors<'g> = std::iter::Copied<std::slice::Iter<'g, BasicCoverageBlock>>;
222-
223219
#[inline]
224-
fn predecessors(&self, node: Self::Node) -> Self::Predecessors<'_> {
220+
fn predecessors(&self, node: Self::Node) -> impl Iterator<Item = Self::Node> {
225221
self.predecessors[node].iter().copied()
226222
}
227223
}

0 commit comments

Comments
 (0)