Skip to content

Commit fab28a1

Browse files
fix visitors in compiler/rustc_middle/src/thir/visit.rs with refactoring
1 parent 52882f6 commit fab28a1

File tree

1 file changed

+73
-74
lines changed

1 file changed

+73
-74
lines changed

compiler/rustc_middle/src/thir/visit.rs

Lines changed: 73 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -41,106 +41,100 @@ pub fn walk_expr<'thir, 'tcx: 'thir, V: Visitor<'thir, 'tcx>>(
4141
expr: &'thir Expr<'tcx>,
4242
) {
4343
use ExprKind::*;
44-
match expr.kind {
44+
let Expr { kind, ty, temp_lifetime, span } = expr;
45+
match kind {
4546
Scope { value, region_scope: _, lint_level: _ } => {
46-
visitor.visit_expr(&visitor.thir()[value])
47+
visitor.visit_expr(visitor.thir()[value])
4748
}
48-
Box { value } => visitor.visit_expr(&visitor.thir()[value]),
49+
Box { value } => visitor.visit_expr(visitor.thir()[value]),
4950
If { cond, then, else_opt, if_then_scope: _ } => {
50-
visitor.visit_expr(&visitor.thir()[cond]);
51-
visitor.visit_expr(&visitor.thir()[then]);
51+
visitor.visit_expr(visitor.thir()[cond]);
52+
visitor.visit_expr(visitor.thir()[then]);
5253
if let Some(else_expr) = else_opt {
53-
visitor.visit_expr(&visitor.thir()[else_expr]);
54+
visitor.visit_expr(visitor.thir()[else_expr]);
5455
}
5556
}
56-
Call { fun, ref args, ty: _, from_hir_call: _, fn_span: _ } => {
57-
visitor.visit_expr(&visitor.thir()[fun]);
58-
for &arg in &**args {
59-
visitor.visit_expr(&visitor.thir()[arg]);
57+
Call { fun, args, ty: _, from_hir_call: _, fn_span: _ } => {
58+
visitor.visit_expr(visitor.thir()[fun]);
59+
for arg in args {
60+
visitor.visit_expr(visitor.thir()[arg]);
6061
}
6162
}
6263
ByUse { expr, span: _ } => {
63-
visitor.visit_expr(&visitor.thir()[expr]);
64+
visitor.visit_expr(visitor.thir()[expr]);
6465
}
65-
Deref { arg } => visitor.visit_expr(&visitor.thir()[arg]),
66+
Deref { arg } => visitor.visit_expr(visitor.thir()[arg]),
6667
Binary { lhs, rhs, op: _ } | LogicalOp { lhs, rhs, op: _ } => {
67-
visitor.visit_expr(&visitor.thir()[lhs]);
68-
visitor.visit_expr(&visitor.thir()[rhs]);
68+
visitor.visit_expr(visitor.thir()[lhs]);
69+
visitor.visit_expr(visitor.thir()[rhs]);
6970
}
70-
Unary { arg, op: _ } => visitor.visit_expr(&visitor.thir()[arg]),
71-
Cast { source } => visitor.visit_expr(&visitor.thir()[source]),
72-
Use { source } => visitor.visit_expr(&visitor.thir()[source]),
73-
NeverToAny { source } => visitor.visit_expr(&visitor.thir()[source]),
71+
Unary { arg, op: _ } => visitor.visit_expr(visitor.thir()[arg]),
72+
Cast { source } => visitor.visit_expr(visitor.thir()[source]),
73+
Use { source } => visitor.visit_expr(visitor.thir()[source]),
74+
NeverToAny { source } => visitor.visit_expr(visitor.thir()[source]),
7475
PointerCoercion { source, cast: _, is_from_as_cast: _ } => {
75-
visitor.visit_expr(&visitor.thir()[source])
76+
visitor.visit_expr(visitor.thir()[source])
7677
}
77-
Let { expr, ref pat } => {
78-
visitor.visit_expr(&visitor.thir()[expr]);
78+
Let { expr, pat } => {
79+
visitor.visit_expr(visitor.thir()[expr]);
7980
visitor.visit_pat(pat);
8081
}
81-
Loop { body } => visitor.visit_expr(&visitor.thir()[body]),
82-
Match { scrutinee, ref arms, .. } => {
83-
visitor.visit_expr(&visitor.thir()[scrutinee]);
84-
for &arm in &**arms {
85-
visitor.visit_arm(&visitor.thir()[arm]);
82+
Loop { body } => visitor.visit_expr(visitor.thir()[body]),
83+
Match { scrutinee, arms, .. } => {
84+
visitor.visit_expr(visitor.thir()[scrutinee]);
85+
for arm in arms {
86+
visitor.visit_arm(visitor.thir()[arm]);
8687
}
8788
}
88-
Block { block } => visitor.visit_block(&visitor.thir()[block]),
89+
Block { block } => visitor.visit_block(visitor.thir()[block]),
8990
Assign { lhs, rhs } | AssignOp { lhs, rhs, op: _ } => {
90-
visitor.visit_expr(&visitor.thir()[lhs]);
91-
visitor.visit_expr(&visitor.thir()[rhs]);
91+
visitor.visit_expr(visitor.thir()[lhs]);
92+
visitor.visit_expr(visitor.thir()[rhs]);
9293
}
93-
Field { lhs, variant_index: _, name: _ } => visitor.visit_expr(&visitor.thir()[lhs]),
94+
Field { lhs, variant_index: _, name: _ } => visitor.visit_expr(visitor.thir()[lhs]),
9495
Index { lhs, index } => {
95-
visitor.visit_expr(&visitor.thir()[lhs]);
96-
visitor.visit_expr(&visitor.thir()[index]);
96+
visitor.visit_expr(visitor.thir()[lhs]);
97+
visitor.visit_expr(visitor.thir()[index]);
9798
}
9899
VarRef { id: _ } | UpvarRef { closure_def_id: _, var_hir_id: _ } => {}
99-
Borrow { arg, borrow_kind: _ } => visitor.visit_expr(&visitor.thir()[arg]),
100-
RawBorrow { arg, mutability: _ } => visitor.visit_expr(&visitor.thir()[arg]),
100+
Borrow { arg, borrow_kind: _ } => visitor.visit_expr(visitor.thir()[arg]),
101+
RawBorrow { arg, mutability: _ } => visitor.visit_expr(visitor.thir()[arg]),
101102
Break { value, label: _ } => {
102103
if let Some(value) = value {
103-
visitor.visit_expr(&visitor.thir()[value])
104+
visitor.visit_expr(visitor.thir()[value])
104105
}
105106
}
106107
Continue { label: _ } => {}
107108
Return { value } => {
108109
if let Some(value) = value {
109-
visitor.visit_expr(&visitor.thir()[value])
110+
visitor.visit_expr(visitor.thir()[value])
110111
}
111112
}
112-
Become { value } => visitor.visit_expr(&visitor.thir()[value]),
113+
Become { value } => visitor.visit_expr(visitor.thir()[value]),
113114
ConstBlock { did: _, args: _ } => {}
114115
Repeat { value, count: _ } => {
115-
visitor.visit_expr(&visitor.thir()[value]);
116+
visitor.visit_expr(visitor.thir()[value]);
116117
}
117-
Array { ref fields } | Tuple { ref fields } => {
118-
for &field in &**fields {
119-
visitor.visit_expr(&visitor.thir()[field]);
118+
Array { ref fields } | Tuple { fields } => {
119+
for field in fields {
120+
visitor.visit_expr(visitor.thir()[field]);
120121
}
121122
}
122-
Adt(box AdtExpr {
123-
ref fields,
124-
ref base,
125-
adt_def: _,
126-
variant_index: _,
127-
args: _,
128-
user_ty: _,
129-
}) => {
130-
for field in &**fields {
131-
visitor.visit_expr(&visitor.thir()[field.expr]);
123+
Adt(box AdtExpr { fields, base, adt_def: _, variant_index: _, args: _, user_ty: _ }) => {
124+
for field in fields {
125+
visitor.visit_expr(visitor.thir()[field.expr]);
132126
}
133127
if let AdtExprBase::Base(base) = base {
134-
visitor.visit_expr(&visitor.thir()[base.base]);
128+
visitor.visit_expr(visitor.thir()[base.base]);
135129
}
136130
}
137131
PlaceTypeAscription { source, user_ty: _, user_ty_span: _ }
138132
| ValueTypeAscription { source, user_ty: _, user_ty_span: _ } => {
139-
visitor.visit_expr(&visitor.thir()[source])
133+
visitor.visit_expr(visitor.thir()[source])
140134
}
141135
PlaceUnwrapUnsafeBinder { source }
142136
| ValueUnwrapUnsafeBinder { source }
143-
| WrapUnsafeBinder { source } => visitor.visit_expr(&visitor.thir()[source]),
137+
| WrapUnsafeBinder { source } => visitor.visit_expr(visitor.thir()[source]),
144138
Closure(box ClosureExpr {
145139
closure_id: _,
146140
args: _,
@@ -156,43 +150,44 @@ pub fn walk_expr<'thir, 'tcx: 'thir, V: Visitor<'thir, 'tcx>>(
156150
StaticRef { alloc_id: _, ty: _, def_id: _ } => {}
157151
InlineAsm(box InlineAsmExpr {
158152
asm_macro: _,
159-
ref operands,
153+
operands,
160154
template: _,
161155
options: _,
162156
line_spans: _,
163157
}) => {
164-
for op in &**operands {
158+
for op in operands {
165159
use InlineAsmOperand::*;
166160
match op {
167161
In { expr, reg: _ }
168162
| Out { expr: Some(expr), reg: _, late: _ }
169-
| InOut { expr, reg: _, late: _ } => visitor.visit_expr(&visitor.thir()[*expr]),
163+
| InOut { expr, reg: _, late: _ } => visitor.visit_expr(visitor.thir()[expr]),
170164
SplitInOut { in_expr, out_expr, reg: _, late: _ } => {
171-
visitor.visit_expr(&visitor.thir()[*in_expr]);
165+
visitor.visit_expr(visitor.thir()[in_expr]);
172166
if let Some(out_expr) = out_expr {
173-
visitor.visit_expr(&visitor.thir()[*out_expr]);
167+
visitor.visit_expr(visitor.thir()[out_expr]);
174168
}
175169
}
176170
Out { expr: None, reg: _, late: _ }
177171
| Const { value: _, span: _ }
178172
| SymFn { value: _ }
179173
| SymStatic { def_id: _ } => {}
180-
Label { block } => visitor.visit_block(&visitor.thir()[*block]),
174+
Label { block } => visitor.visit_block(visitor.thir()[block]),
181175
}
182176
}
183177
}
184178
OffsetOf { container: _, fields: _ } => {}
185179
ThreadLocalRef(_) => {}
186-
Yield { value } => visitor.visit_expr(&visitor.thir()[value]),
180+
Yield { value } => visitor.visit_expr(visitor.thir()[value]),
187181
}
188182
}
189183

190184
pub fn walk_stmt<'thir, 'tcx: 'thir, V: Visitor<'thir, 'tcx>>(
191185
visitor: &mut V,
192186
stmt: &'thir Stmt<'tcx>,
193187
) {
194-
match &stmt.kind {
195-
StmtKind::Expr { expr, scope: _ } => visitor.visit_expr(&visitor.thir()[*expr]),
188+
let Stmt { kind } = stmt;
189+
match kind {
190+
StmtKind::Expr { expr, scope: _ } => visitor.visit_expr(visitor.thir()[expr]),
196191
StmtKind::Let {
197192
initializer,
198193
remainder_scope: _,
@@ -203,11 +198,11 @@ pub fn walk_stmt<'thir, 'tcx: 'thir, V: Visitor<'thir, 'tcx>>(
203198
span: _,
204199
} => {
205200
if let Some(init) = initializer {
206-
visitor.visit_expr(&visitor.thir()[*init]);
201+
visitor.visit_expr(visitor.thir()[init]);
207202
}
208203
visitor.visit_pat(pattern);
209204
if let Some(block) = else_block {
210-
visitor.visit_block(&visitor.thir()[*block])
205+
visitor.visit_block(visitor.thir()[block])
211206
}
212207
}
213208
}
@@ -217,23 +212,26 @@ pub fn walk_block<'thir, 'tcx: 'thir, V: Visitor<'thir, 'tcx>>(
217212
visitor: &mut V,
218213
block: &'thir Block,
219214
) {
220-
for &stmt in &*block.stmts {
221-
visitor.visit_stmt(&visitor.thir()[stmt]);
215+
let Block { targeted_by_break: _, region_scope: _, span: _, stmts, expr, safety_mode: _ } =
216+
block;
217+
for stmt in stmts {
218+
visitor.visit_stmt(visitor.thir()[stmt]);
222219
}
223-
if let Some(expr) = block.expr {
224-
visitor.visit_expr(&visitor.thir()[expr]);
220+
if let Some(expr) = expr {
221+
visitor.visit_expr(visitor.thir()[expr]);
225222
}
226223
}
227224

228225
pub fn walk_arm<'thir, 'tcx: 'thir, V: Visitor<'thir, 'tcx>>(
229226
visitor: &mut V,
230227
arm: &'thir Arm<'tcx>,
231228
) {
232-
if let Some(expr) = arm.guard {
233-
visitor.visit_expr(&visitor.thir()[expr])
229+
let Arm { pattern, guard, body, lint_level: _, scope: _, span: _ } = arm;
230+
if let Some(expr) = guard {
231+
visitor.visit_expr(visitor.thir()[expr])
234232
}
235-
visitor.visit_pat(&arm.pattern);
236-
visitor.visit_expr(&visitor.thir()[arm.body]);
233+
visitor.visit_pat(pattern);
234+
visitor.visit_expr(visitor.thir()[body]);
237235
}
238236

239237
pub fn walk_pat<'thir, 'tcx: 'thir, V: Visitor<'thir, 'tcx>>(
@@ -249,7 +247,8 @@ pub(crate) fn for_each_immediate_subpat<'a, 'tcx>(
249247
pat: &'a Pat<'tcx>,
250248
mut callback: impl FnMut(&'a Pat<'tcx>),
251249
) {
252-
match &pat.kind {
250+
let Pat { ty: _, span: _, kind } = pat;
251+
match kind {
253252
PatKind::Missing
254253
| PatKind::Wild
255254
| PatKind::Binding { subpattern: None, .. }

0 commit comments

Comments
 (0)