1pub use rustc_ast_ir::visit::VisitorResult;
17pub use rustc_ast_ir::{try_visit, visit_opt, walk_list, walk_visitable_list};
18use rustc_span::{Ident, Span, Spanned, Symbol};
19use thin_vec::ThinVec;
20
21use crate::ast::*;
22use crate::tokenstream::DelimSpan;
23
24#[derive(#[automatically_derived]
impl ::core::marker::Copy for AssocCtxt { }Copy, #[automatically_derived]
impl ::core::clone::Clone for AssocCtxt {
#[inline]
fn clone(&self) -> AssocCtxt {
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AssocCtxt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
AssocCtxt::Trait => ::core::fmt::Formatter::write_str(f, "Trait"),
AssocCtxt::Impl { of_trait: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Impl",
"of_trait", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for AssocCtxt {
#[inline]
fn eq(&self, other: &AssocCtxt) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(AssocCtxt::Impl { of_trait: __self_0 }, AssocCtxt::Impl {
of_trait: __arg1_0 }) => __self_0 == __arg1_0,
_ => true,
}
}
}PartialEq)]
25pub enum AssocCtxt {
26 Trait,
27 Impl { of_trait: bool },
28}
29
30#[derive(#[automatically_derived]
impl ::core::marker::Copy for FnCtxt { }Copy, #[automatically_derived]
impl ::core::clone::Clone for FnCtxt {
#[inline]
fn clone(&self) -> FnCtxt {
let _: ::core::clone::AssertParamIsClone<AssocCtxt>;
*self
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for FnCtxt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
FnCtxt::Free => ::core::fmt::Formatter::write_str(f, "Free"),
FnCtxt::Foreign =>
::core::fmt::Formatter::write_str(f, "Foreign"),
FnCtxt::Assoc(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Assoc",
&__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::cmp::PartialEq for FnCtxt {
#[inline]
fn eq(&self, other: &FnCtxt) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(FnCtxt::Assoc(__self_0), FnCtxt::Assoc(__arg1_0)) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq)]
31pub enum FnCtxt {
32 Free,
33 Foreign,
34 Assoc(AssocCtxt),
35}
36
37#[derive(#[automatically_derived]
impl ::core::marker::Copy for BoundKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for BoundKind {
#[inline]
fn clone(&self) -> BoundKind { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for BoundKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
BoundKind::Bound => "Bound",
BoundKind::Impl => "Impl",
BoundKind::TraitObject => "TraitObject",
BoundKind::SuperTraits => "SuperTraits",
})
}
}Debug)]
38pub enum BoundKind {
39 Bound,
42
43 Impl,
46
47 TraitObject,
50
51 SuperTraits,
54}
55impl BoundKind {
56 pub fn descr(self) -> &'static str {
57 match self {
58 BoundKind::Bound => "bounds",
59 BoundKind::Impl => "`impl Trait`",
60 BoundKind::TraitObject => "`dyn` trait object bounds",
61 BoundKind::SuperTraits => "supertrait bounds",
62 }
63 }
64}
65
66#[derive(#[automatically_derived]
impl ::core::marker::Copy for LifetimeCtxt { }Copy, #[automatically_derived]
impl ::core::clone::Clone for LifetimeCtxt {
#[inline]
fn clone(&self) -> LifetimeCtxt { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for LifetimeCtxt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
LifetimeCtxt::Ref => "Ref",
LifetimeCtxt::Bound => "Bound",
LifetimeCtxt::GenericArg => "GenericArg",
})
}
}Debug)]
67pub enum LifetimeCtxt {
68 Ref,
70 Bound,
72 GenericArg,
74}
75
76pub(crate) trait Visitable<'a, V: Visitor<'a>> {
77 type Extra: Copy;
78
79 #[must_use]
80 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result;
81}
82
83impl<'a, V: Visitor<'a>, T: ?Sized> Visitable<'a, V> for Box<T>
84where
85 T: Visitable<'a, V>,
86{
87 type Extra = T::Extra;
88 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
89 (**self).visit(visitor, extra)
90 }
91}
92
93impl<'a, V: Visitor<'a>, T> Visitable<'a, V> for Option<T>
94where
95 T: Visitable<'a, V>,
96{
97 type Extra = T::Extra;
98 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
99 if let Some(this) = self {
100 match ::rustc_ast_ir::visit::VisitorResult::branch(this.visit(visitor, extra))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(this.visit(visitor, extra));
101 }
102 V::Result::output()
103 }
104}
105
106impl<'a, V: Visitor<'a>, T> Visitable<'a, V> for Spanned<T>
107where
108 T: Visitable<'a, V>,
109{
110 type Extra = T::Extra;
111 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
112 let Spanned { span: _, node } = self;
113 node.visit(visitor, extra)
114 }
115}
116
117impl<'a, V: Visitor<'a>, T> Visitable<'a, V> for [T]
118where
119 T: Visitable<'a, V>,
120{
121 type Extra = T::Extra;
122 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
123 for item in self {
124 match ::rustc_ast_ir::visit::VisitorResult::branch(item.visit(visitor, extra))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(item.visit(visitor, extra));
125 }
126 V::Result::output()
127 }
128}
129
130impl<'a, V: Visitor<'a>, T> Visitable<'a, V> for Vec<T>
131where
132 T: Visitable<'a, V>,
133{
134 type Extra = T::Extra;
135 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
136 for item in self {
137 match ::rustc_ast_ir::visit::VisitorResult::branch(item.visit(visitor, extra))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(item.visit(visitor, extra));
138 }
139 V::Result::output()
140 }
141}
142
143impl<'a, V: Visitor<'a>, T> Visitable<'a, V> for (T,)
144where
145 T: Visitable<'a, V>,
146{
147 type Extra = T::Extra;
148 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
149 self.0.visit(visitor, extra)
150 }
151}
152
153impl<'a, V: Visitor<'a>, T1, T2> Visitable<'a, V> for (T1, T2)
154where
155 T1: Visitable<'a, V, Extra = ()>,
156 T2: Visitable<'a, V, Extra = ()>,
157{
158 type Extra = ();
159 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
160 match ::rustc_ast_ir::visit::VisitorResult::branch(self.0.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.0.visit(visitor, extra));
161 match ::rustc_ast_ir::visit::VisitorResult::branch(self.1.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.1.visit(visitor, extra));
162 V::Result::output()
163 }
164}
165
166impl<'a, V: Visitor<'a>, T1, T2, T3> Visitable<'a, V> for (T1, T2, T3)
167where
168 T1: Visitable<'a, V, Extra = ()>,
169 T2: Visitable<'a, V, Extra = ()>,
170 T3: Visitable<'a, V, Extra = ()>,
171{
172 type Extra = ();
173 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
174 match ::rustc_ast_ir::visit::VisitorResult::branch(self.0.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.0.visit(visitor, extra));
175 match ::rustc_ast_ir::visit::VisitorResult::branch(self.1.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.1.visit(visitor, extra));
176 match ::rustc_ast_ir::visit::VisitorResult::branch(self.2.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.2.visit(visitor, extra));
177 V::Result::output()
178 }
179}
180
181impl<'a, V: Visitor<'a>, T1, T2, T3, T4> Visitable<'a, V> for (T1, T2, T3, T4)
182where
183 T1: Visitable<'a, V, Extra = ()>,
184 T2: Visitable<'a, V, Extra = ()>,
185 T3: Visitable<'a, V, Extra = ()>,
186 T4: Visitable<'a, V, Extra = ()>,
187{
188 type Extra = ();
189 fn visit(&'a self, visitor: &mut V, extra: Self::Extra) -> V::Result {
190 match ::rustc_ast_ir::visit::VisitorResult::branch(self.0.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.0.visit(visitor, extra));
191 match ::rustc_ast_ir::visit::VisitorResult::branch(self.1.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.1.visit(visitor, extra));
192 match ::rustc_ast_ir::visit::VisitorResult::branch(self.2.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.2.visit(visitor, extra));
193 match ::rustc_ast_ir::visit::VisitorResult::branch(self.3.visit(visitor,
extra)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(self.3.visit(visitor, extra));
194 V::Result::output()
195 }
196}
197
198pub(crate) trait Walkable<'a, V: Visitor<'a>> {
199 #[must_use]
200 fn walk_ref(&'a self, visitor: &mut V) -> V::Result;
201}
202
203macro_rules! visit_visitable {
204 ($visitor:expr, $($expr:expr),* $(,)?) => {{
205 $(try_visit!(Visitable::visit($expr, $visitor, ()));)*
206 }};
207}
208
209macro_rules! visit_visitable_with {
210 ($visitor:expr, $expr:expr, $extra:expr $(,)?) => {
211 try_visit!(Visitable::visit($expr, $visitor, $extra))
212 };
213}
214
215macro_rules! walk_walkable {
216 ($visitor:expr, $expr:expr, ) => {
217 Walkable::walk_ref($expr, $visitor)
218 };
219}
220
221macro_rules! impl_visitable {
222 (|&$lt:lifetime $self:ident: $self_ty:ty,
223 $vis:ident: &mut $vis_ty:ident,
224 $extra:ident: $extra_ty:ty| $block:block) => {
225 #[allow(unused_parens, non_local_definitions)]
226 impl<$lt, $vis_ty: Visitor<$lt>> Visitable<$lt, $vis_ty> for $self_ty {
227 type Extra = $extra_ty;
228 fn visit(&$lt $self, $vis: &mut $vis_ty, $extra: Self::Extra) -> V::Result {
229 $block
230 }
231 }
232 };
233}
234
235macro_rules! impl_walkable {
236 ($(<$K:ident: $Kb:ident>)? |&$lt:lifetime $self:ident: $self_ty:ty,
237 $vis:ident: &mut $vis_ty:ident| $block:block) => {
238 #[allow(unused_parens, non_local_definitions)]
239 impl<$($K: $Kb,)? $lt, $vis_ty: Visitor<$lt>> Walkable<$lt, $vis_ty> for $self_ty {
240 fn walk_ref(&$lt $self, $vis: &mut $vis_ty) -> V::Result {
241 $block
242 }
243 }
244 };
245}
246
247macro_rules! impl_visitable_noop {
248 (<$lt:lifetime> $($ty:ty,)*) => {
249 $(
250 impl_visitable!(|&$lt self: $ty, _vis: &mut V, _extra: ()| {
251 V::Result::output()
252 });
253 )*
254 };
255}
256
257macro_rules! impl_visitable_list {
258 (<$lt:lifetime> $($ty:ty,)*) => {
259 $(impl<$lt, V: Visitor<$lt>, T> Visitable<$lt, V> for $ty
260 where
261 &$lt $ty: IntoIterator<Item = &$lt T>,
262 T: $lt + Visitable<$lt, V>,
263 {
264 type Extra = <T as Visitable<$lt, V>>::Extra;
265
266 #[inline]
267 fn visit(&$lt self, visitor: &mut V, extra: Self::Extra) -> V::Result {
268 for i in self {
269 try_visit!(i.visit(visitor, extra));
270 }
271 V::Result::output()
272 }
273 })*
274 };
275}
276
277macro_rules! impl_visitable_direct {
278 (<$lt:lifetime> $($ty:ty,)*) => {
279 $(impl_visitable!(
280 |&$lt self: $ty, visitor: &mut V, _extra: ()| {
281 Walkable::walk_ref(self, visitor)
282 }
283 );)*
284 };
285}
286
287macro_rules! impl_visitable_calling_walkable {
288 (<$lt:lifetime>
289 $( fn $method:ident($ty:ty $(, $extra_name:ident: $extra_ty:ty)?); )*
290 ) => {
291 $(fn $method(&mut self, node: &$lt $ty $(, $extra_name:$extra_ty)?) -> Self::Result {
292 impl_visitable!(|&$lt self: $ty, visitor: &mut V, extra: ($($extra_ty)?)| {
293 let ($($extra_name)?) = extra;
294 visitor.$method(self $(, $extra_name)?)
295 });
296 walk_walkable!(self, node, )
297 })*
298 };
299}
300
301macro_rules! define_named_walk {
302 ($Visitor:ident<$lt:lifetime>
303 $( pub fn $method:ident($ty:ty); )*
304 ) => {
305 $(pub fn $method<$lt, V: $Visitor<$lt>>(visitor: &mut V, node: &$lt $ty) -> V::Result {
306 walk_walkable!(visitor, node,)
307 })*
308 };
309}
310
311#[macro_export]
312macro_rules! common_visitor_and_walkers {
313 ($(($mut: ident))? $Visitor:ident$(<$lt:lifetime>)?) => {
314 $(${ignore($lt)}
315 #[derive(Copy, Clone)]
316 )?
317 #[derive(Debug)]
318 pub enum FnKind<'a> {
319 Fn(FnCtxt, &'a $($mut)? Visibility, &'a $($mut)? Fn),
321
322 Closure(&'a $($mut)? ClosureBinder, &'a $($mut)? Option<CoroutineKind>, &'a $($mut)? Box<FnDecl>, &'a $($mut)? Box<Expr>),
324 }
325
326 impl<'a> FnKind<'a> {
327 pub fn header(&'a $($mut)? self) -> Option<&'a $($mut)? FnHeader> {
328 match *self {
329 FnKind::Fn(_, _, Fn { sig, .. }) => Some(&$($mut)? sig.header),
330 FnKind::Closure(..) => None,
331 }
332 }
333
334 pub fn ident(&'a $($mut)? self) -> Option<&'a $($mut)? Ident> {
335 match self {
336 FnKind::Fn(_, _, Fn { ident, .. }) => Some(ident),
337 _ => None,
338 }
339 }
340
341 pub fn decl(&'a $($mut)? self) -> &'a $($mut)? FnDecl {
342 match self {
343 FnKind::Fn(_, _, Fn { sig, .. }) => &$($mut)? sig.decl,
344 FnKind::Closure(_, _, decl, _) => decl,
345 }
346 }
347
348 pub fn ctxt(&self) -> Option<FnCtxt> {
349 match self {
350 FnKind::Fn(ctxt, ..) => Some(*ctxt),
351 FnKind::Closure(..) => None,
352 }
353 }
354 }
355
356 impl_visitable_noop!(<$($lt)? $($mut)?>
358 AttrId,
359 bool,
360 rustc_span::ByteSymbol,
361 char,
362 crate::token::CommentKind,
363 crate::token::Delimiter,
364 crate::token::Lit,
365 crate::token::LitKind,
366 crate::tokenstream::LazyAttrTokenStream,
367 crate::tokenstream::TokenStream,
368 EarlyParsedAttribute,
369 Movability,
370 Mutability,
371 Pinnedness,
372 Result<(), rustc_span::ErrorGuaranteed>,
373 rustc_data_structures::fx::FxHashMap<Symbol, usize>,
374 rustc_span::ErrorGuaranteed,
375 std::borrow::Cow<'_, str>,
376 Symbol,
377 u8,
378 usize,
379 );
380 $(impl_visitable_noop!(<$lt> Span,);)?
382
383 impl_visitable_list!(<$($lt)? $($mut)?>
387 ThinVec<AngleBracketedArg>,
388 ThinVec<Attribute>,
389 ThinVec<(Ident, Option<Ident>)>,
390 ThinVec<(NodeId, Path)>,
391 ThinVec<PathSegment>,
392 ThinVec<PreciseCapturingArg>,
393 ThinVec<Pat>,
394 ThinVec<Box<Ty>>,
395 ThinVec<TyPat>,
396 ThinVec<EiiImpl>,
397 );
398
399 impl_visitable_direct!(<$($lt)? $($mut)?>
403 AngleBracketedArg,
404 AngleBracketedArgs,
405 AsmMacro,
406 AssignOpKind,
407 AssocItemConstraintKind,
408 AttrArgs,
409 AttrItem,
410 AttrKind,
411 AttrStyle,
412 FnPtrTy,
413 BindingMode,
414 GenBlockKind,
415 RangeLimits,
416 UnsafeBinderCastKind,
417 BinOpKind,
418 BlockCheckMode,
419 MgcaDisambiguation,
420 BorrowKind,
421 BoundAsyncness,
422 BoundConstness,
423 BoundPolarity,
424 ByRef,
425 Closure,
426 Const,
427 ConstBlockItem,
428 ConstItem,
429 ConstItemRhsKind,
430 Defaultness,
431 Delegation,
432 DelegationMac,
433 DelimArgs,
434 DelimSpan,
435 EnumDef,
436 Extern,
437 ForLoopKind,
438 FormatArgPosition,
439 FormatArgsPiece,
440 FormatArgument,
441 FormatArgumentKind,
442 FormatArguments,
443 FormatPlaceholder,
444 GenericParamKind,
445 Guard,
446 Impl,
447 ImplPolarity,
448 Inline,
449 InlineAsmOperand,
450 InlineAsmRegOrRegClass,
451 InlineAsmTemplatePiece,
452 IsAuto,
453 LocalKind,
454 MacCallStmt,
455 MacStmtStyle,
456 MatchKind,
457 MethodCall,
458 ModKind,
459 ModSpans,
460 MutTy,
461 NormalAttr,
462 AttrItemKind,
463 Parens,
464 ParenthesizedArgs,
465 PatFieldsRest,
466 PatKind,
467 RangeEnd,
468 RangeSyntax,
469 Recovered,
470 RestrictionKind,
471 Safety,
472 StaticItem,
473 StrLit,
474 StrStyle,
475 StructExpr,
476 StructRest,
477 Term,
478 Trait,
479 TraitBoundModifiers,
480 TraitObjectSyntax,
481 TyAlias,
482 TyKind,
483 TyPatKind,
484 UnOp,
485 UnsafeBinderTy,
486 UnsafeSource,
487 UseTreeKind,
488 VisibilityKind,
489 WhereBoundPredicate,
490 WhereClause,
491 WhereEqPredicate,
492 WhereRegionPredicate,
493 YieldKind,
494 EiiDecl,
495 EiiImpl,
496 );
497
498 #[doc = concat!(" e.g., the `visit_item` method by default calls `visit"$(, "_", stringify!($mut))?, "::walk_item`.")]
502 pub trait $Visitor<$($lt)?> : Sized $(${ignore($mut)} + MutVisitorResult<Result = ()>)? {
512 $(
513 ${ignore($lt)}
514 type Result: VisitorResult = ();
517 )?
518
519 fn visit_ident(&mut self, Ident { name: _, span }: &$($lt)? $($mut)? Ident) -> Self::Result {
547 impl_visitable!(|&$($lt)? $($mut)? self: Ident, visitor: &mut V, _extra: ()| {
548 visitor.visit_ident(self)
549 });
550 visit_span(self, span)
551 }
552
553 impl_visitable_calling_walkable!(<$($lt)? $($mut)?>
557 fn visit_anon_const(AnonConst);
558 fn visit_arm(Arm);
559 fn visit_assoc_item_constraint(AssocItemConstraint);
561 fn visit_attribute(Attribute);
562 fn visit_block(Block);
563 fn visit_capture_by(CaptureBy);
565 fn visit_closure_binder(ClosureBinder);
566 fn visit_contract(FnContract);
567 fn visit_coroutine_kind(CoroutineKind);
568 fn visit_crate(Crate);
569 fn visit_expr(Expr);
570 fn visit_expr_field(ExprField);
571 fn visit_field_def(FieldDef);
572 fn visit_fn_decl(FnDecl);
573 fn visit_fn_header(FnHeader);
574 fn visit_fn_ret_ty(FnRetTy);
575 fn visit_foreign_mod(ForeignMod);
577 fn visit_format_args(FormatArgs);
578 fn visit_generic_arg(GenericArg);
579 fn visit_generic_args(GenericArgs);
580 fn visit_generic_param(GenericParam);
581 fn visit_generics(Generics);
582 fn visit_inline_asm(InlineAsm);
583 fn visit_inline_asm_sym(InlineAsmSym);
584 fn visit_label(Label);
586 fn visit_lifetime(Lifetime, _ctxt: LifetimeCtxt);
587 fn visit_local(Local);
588 fn visit_mac_call(MacCall);
589 fn visit_macro_def(MacroDef);
590 fn visit_param_bound(GenericBound, _ctxt: BoundKind);
591 fn visit_param(Param);
592 fn visit_pat_field(PatField);
593 fn visit_path(Path);
594 fn visit_path_segment(PathSegment);
595 fn visit_pat(Pat);
596 fn visit_poly_trait_ref(PolyTraitRef);
597 fn visit_precise_capturing_arg(PreciseCapturingArg);
598 fn visit_qself(QSelf);
599 fn visit_impl_restriction(ImplRestriction);
600 fn visit_trait_ref(TraitRef);
601 fn visit_ty_pat(TyPat);
602 fn visit_ty(Ty);
603 fn visit_use_tree(UseTree);
604 fn visit_variant_data(VariantData);
605 fn visit_variant(Variant);
606 fn visit_vis(Visibility);
607 fn visit_where_predicate_kind(WherePredicateKind);
608 fn visit_where_predicate(WherePredicate);
609 );
610
611 fn visit_id(&mut self, _id: $(&$mut)? NodeId) -> Self::Result {
613 $(impl_visitable!(
614 |&$lt self: NodeId, visitor: &mut V, _extra: ()| {
615 visitor.visit_id(*self)
616 }
617 );)?
618 $(impl_visitable!(
619 |&$mut self: NodeId, visitor: &mut V, _extra: ()| {
620 visitor.visit_id(self)
621 }
622 );)?
623 Self::Result::output()
624 }
625
626 fn visit_method_receiver_expr(&mut self, ex: &$($lt)? $($mut)? Expr) -> Self::Result {
629 self.visit_expr(ex)
630 }
631
632 fn visit_item(&mut self, item: &$($lt)? $($mut)? Item) -> Self::Result {
633 impl_visitable!(|&$($lt)? $($mut)? self: Item, vis: &mut V, _extra: ()| {
634 vis.visit_item(self)
635 });
636 walk_item(self, item)
637 }
638
639 fn visit_foreign_item(&mut self, item: &$($lt)? $($mut)? ForeignItem) -> Self::Result {
640 impl_visitable!(|&$($lt)? $($mut)? self: ForeignItem, vis: &mut V, _extra: ()| {
641 vis.visit_foreign_item(self)
642 });
643 walk_item(self, item)
644 }
645
646 fn visit_assoc_item(&mut self, item: &$($lt)? $($mut)? AssocItem, ctxt: AssocCtxt) -> Self::Result {
647 impl_visitable!(|&$($lt)? $($mut)? self: AssocItem, vis: &mut V, ctxt: AssocCtxt| {
648 vis.visit_assoc_item(self, ctxt)
649 });
650 walk_assoc_item(self, item, ctxt)
651 }
652
653 fn visit_fn(
655 &mut self,
656 fk: FnKind<$($lt)? $(${ignore($mut)} '_)?>,
657 _: &AttrVec,
658 _: Span,
659 _: NodeId,
660 ) -> Self::Result {
661 walk_fn(self, fk)
662 }
663
664 $(
666 fn visit_stmt(&mut self, s: &$lt Stmt) -> Self::Result {
667 walk_stmt(self, s)
668 }
669
670 fn visit_nested_use_tree(&mut self, use_tree: &$lt UseTree, id: NodeId) -> Self::Result {
671 try_visit!(self.visit_id(id));
672 self.visit_use_tree(use_tree)
673 }
674 )?
675
676 $(
678 #[inline]
681 fn visit_span(&mut self, _sp: &$mut Span) {
682 impl_visitable!(|&mut self: Span, visitor: &mut V, _extra: ()| {
683 visitor.visit_span(self)
684 });
685 }
687
688 fn flat_map_foreign_item(&mut self, ni: Box<ForeignItem>) -> SmallVec<[Box<ForeignItem>; 1]> {
689 walk_flat_map_foreign_item(self, ni)
690 }
691
692 fn flat_map_item(&mut self, i: Box<Item>) -> SmallVec<[Box<Item>; 1]> {
693 walk_flat_map_item(self, i)
694 }
695
696 fn flat_map_field_def(&mut self, fd: FieldDef) -> SmallVec<[FieldDef; 1]> {
697 walk_flat_map_field_def(self, fd)
698 }
699
700 fn flat_map_assoc_item(
701 &mut self,
702 i: Box<AssocItem>,
703 ctxt: AssocCtxt,
704 ) -> SmallVec<[Box<AssocItem>; 1]> {
705 walk_flat_map_assoc_item(self, i, ctxt)
706 }
707
708 fn flat_map_stmt(&mut self, s: Stmt) -> SmallVec<[Stmt; 1]> {
709 walk_flat_map_stmt(self, s)
710 }
711
712 fn flat_map_arm(&mut self, arm: Arm) -> SmallVec<[Arm; 1]> {
713 walk_flat_map_arm(self, arm)
714 }
715
716 fn filter_map_expr(&mut self, e: Box<Expr>) -> Option<Box<Expr>> {
717 walk_filter_map_expr(self, e)
718 }
719
720 fn flat_map_variant(&mut self, v: Variant) -> SmallVec<[Variant; 1]> {
721 walk_flat_map_variant(self, v)
722 }
723
724 fn flat_map_param(&mut self, param: Param) -> SmallVec<[Param; 1]> {
725 walk_flat_map_param(self, param)
726 }
727
728 fn flat_map_generic_param(&mut self, param: GenericParam) -> SmallVec<[GenericParam; 1]> {
729 walk_flat_map_generic_param(self, param)
730 }
731
732 fn flat_map_expr_field(&mut self, f: ExprField) -> SmallVec<[ExprField; 1]> {
733 walk_flat_map_expr_field(self, f)
734 }
735
736 fn flat_map_where_predicate(
737 &mut self,
738 where_predicate: WherePredicate,
739 ) -> SmallVec<[WherePredicate; 1]> {
740 walk_flat_map_where_predicate(self, where_predicate)
741 }
742
743 fn flat_map_pat_field(&mut self, fp: PatField) -> SmallVec<[PatField; 1]> {
744 walk_flat_map_pat_field(self, fp)
745 }
746 )?
747 }
748
749 pub trait WalkItemKind {
750 type Ctxt;
751 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
752 &$($lt)? $($mut)? self,
753 attrs: &AttrVec,
754 span: Span,
755 id: NodeId,
756 visibility: &$($lt)? $($mut)? Visibility,
757 ctxt: Self::Ctxt,
758 vis: &mut V,
759 ) -> V::Result;
760 }
761
762 $(${ignore($lt)}
765 #[expect(unused, rustc::disallowed_pass_by_ref)]
766 #[inline]
767 )?
768 fn visit_span<$($lt,)? V: $Visitor$(<$lt>)?>(vis: &mut V, span: &$($lt)? $($mut)? Span) -> V::Result {
769 $(${ignore($mut)} vis.visit_span(span))?;
770 V::Result::output()
771 }
772
773 $(impl_visitable!(|&$lt self: ThinVec<(UseTree, NodeId)>, vis: &mut V, _extra: ()| {
774 for (nested_tree, nested_id) in self {
775 try_visit!(vis.visit_nested_use_tree(nested_tree, *nested_id));
776 }
777 V::Result::output()
778 });)?
779 $(impl_visitable_list!(<$mut> ThinVec<(UseTree, NodeId)>,);)?
780
781 fn walk_item_inner<$($lt,)? K: WalkItemKind, V: $Visitor$(<$lt>)?>(
782 visitor: &mut V,
783 item: &$($mut)? $($lt)? Item<K>,
784 ctxt: K::Ctxt,
785 ) -> V::Result {
786 let Item { attrs, id, kind, vis, span, tokens: _ } = item;
787 visit_visitable!($($mut)? visitor, id, attrs, vis);
788 try_visit!(kind.walk(attrs, *span, *id, vis, ctxt, visitor));
789 visit_visitable!($($mut)? visitor, span);
790 V::Result::output()
791 }
792
793 pub fn walk_item<$($lt,)? K: WalkItemKind<Ctxt = ()>, V: $Visitor$(<$lt>)?>(
795 visitor: &mut V,
796 item: &$($mut)? $($lt)? Item<K>,
797 ) -> V::Result {
798 walk_item_inner(visitor, item, ())
799 }
800
801 pub fn walk_assoc_item<$($lt,)? K: WalkItemKind<Ctxt = AssocCtxt>, V: $Visitor$(<$lt>)?>(
803 visitor: &mut V,
804 item: &$($mut)? $($lt)? Item<K>,
805 ctxt: AssocCtxt,
806 ) -> V::Result {
807 walk_item_inner(visitor, item, ctxt)
808 }
809
810 impl WalkItemKind for ItemKind {
811 type Ctxt = ();
812 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
813 &$($lt)? $($mut)? self,
814 attrs: &AttrVec,
815 span: Span,
816 id: NodeId,
817 visibility: &$($lt)? $($mut)? Visibility,
818 _ctxt: Self::Ctxt,
819 vis: &mut V,
820 ) -> V::Result {
821 match self {
822 ItemKind::Fn(func) => {
823 let kind = FnKind::Fn(FnCtxt::Free, visibility, &$($mut)? *func);
824 try_visit!(vis.visit_fn(kind, attrs, span, id));
825 }
826 ItemKind::ExternCrate(orig_name, ident) =>
827 visit_visitable!($($mut)? vis, orig_name, ident),
828 ItemKind::Use(use_tree) =>
829 visit_visitable!($($mut)? vis, use_tree),
830 ItemKind::Static(item) =>
831 visit_visitable!($($mut)? vis, item),
832 ItemKind::ConstBlock(item) =>
833 visit_visitable!($($mut)? vis, item),
834 ItemKind::Const(item) =>
835 visit_visitable!($($mut)? vis, item),
836 ItemKind::Mod(safety, ident, mod_kind) =>
837 visit_visitable!($($mut)? vis, safety, ident, mod_kind),
838 ItemKind::ForeignMod(nm) =>
839 visit_visitable!($($mut)? vis, nm),
840 ItemKind::GlobalAsm(asm) =>
841 visit_visitable!($($mut)? vis, asm),
842 ItemKind::TyAlias(ty_alias) =>
843 visit_visitable!($($mut)? vis, ty_alias),
844 ItemKind::Enum(ident, generics, enum_definition) =>
845 visit_visitable!($($mut)? vis, ident, generics, enum_definition),
846 ItemKind::Struct(ident, generics, variant_data)
847 | ItemKind::Union(ident, generics, variant_data) =>
848 visit_visitable!($($mut)? vis, ident, generics, variant_data),
849 ItemKind::Impl(impl_) =>
850 visit_visitable!($($mut)? vis, impl_),
851 ItemKind::Trait(trait_) =>
852 visit_visitable!($($mut)? vis, trait_),
853 ItemKind::TraitAlias(box TraitAlias { constness, ident, generics, bounds}) => {
854 visit_visitable!($($mut)? vis, constness, ident, generics);
855 visit_visitable_with!($($mut)? vis, bounds, BoundKind::Bound)
856 }
857 ItemKind::MacCall(m) =>
858 visit_visitable!($($mut)? vis, m),
859 ItemKind::MacroDef(ident, def) =>
860 visit_visitable!($($mut)? vis, ident, def),
861 ItemKind::Delegation(delegation) =>
862 visit_visitable!($($mut)? vis, delegation),
863 ItemKind::DelegationMac(dm) =>
864 visit_visitable!($($mut)? vis, dm),
865 }
866 V::Result::output()
867 }
868 }
869
870 impl WalkItemKind for AssocItemKind {
871 type Ctxt = AssocCtxt;
872 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
873 &$($lt)? $($mut)? self,
874 attrs: &AttrVec,
875 span: Span,
876 id: NodeId,
877 visibility: &$($lt)? $($mut)? Visibility,
878 ctxt: Self::Ctxt,
879 vis: &mut V,
880 ) -> V::Result {
881 match self {
882 AssocItemKind::Const(item) =>
883 visit_visitable!($($mut)? vis, item),
884 AssocItemKind::Fn(func) => {
885 let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), visibility, &$($mut)? *func);
886 try_visit!(vis.visit_fn(kind, attrs, span, id))
887 }
888 AssocItemKind::Type(alias) =>
889 visit_visitable!($($mut)? vis, alias),
890 AssocItemKind::MacCall(mac) =>
891 visit_visitable!($($mut)? vis, mac),
892 AssocItemKind::Delegation(delegation) =>
893 visit_visitable!($($mut)? vis, delegation),
894 AssocItemKind::DelegationMac(dm) =>
895 visit_visitable!($($mut)? vis, dm),
896 }
897 V::Result::output()
898 }
899 }
900
901 impl WalkItemKind for ForeignItemKind {
902 type Ctxt = ();
903 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
904 &$($lt)? $($mut)? self,
905 attrs: &AttrVec,
906 span: Span,
907 id: NodeId,
908 visibility: &$($lt)? $($mut)? Visibility,
909 _ctxt: Self::Ctxt,
910 vis: &mut V,
911 ) -> V::Result {
912 match self {
913 ForeignItemKind::Static(item) =>
914 visit_visitable!($($mut)? vis, item),
915 ForeignItemKind::Fn(func) => {
916 let kind = FnKind::Fn(FnCtxt::Foreign, visibility, &$($mut)?*func);
917 try_visit!(vis.visit_fn(kind, attrs, span, id))
918 }
919 ForeignItemKind::TyAlias(alias) =>
920 visit_visitable!($($mut)? vis, alias),
921 ForeignItemKind::MacCall(mac) =>
922 visit_visitable!($($mut)? vis, mac),
923 }
924 V::Result::output()
925 }
926 }
927
928 pub fn walk_fn<$($lt,)? V: $Visitor$(<$lt>)?>(vis: &mut V, kind: FnKind<$($lt)? $(${ignore($mut)} '_)?>) -> V::Result {
929 match kind {
930 FnKind::Fn(
931 _ctxt,
932 _vis,
934 Fn { defaultness, ident, sig, generics, contract, body, define_opaque, eii_impls },
935 ) => {
936 let FnSig { header, decl, span } = sig;
937 visit_visitable!($($mut)? vis,
938 defaultness, ident, header, generics, decl,
939 contract, body, span, define_opaque, eii_impls
940 );
941 }
942 FnKind::Closure(binder, coroutine_kind, decl, body) =>
943 visit_visitable!($($mut)? vis, binder, coroutine_kind, decl, body),
944 }
945 V::Result::output()
946 }
947
948 impl_walkable!(|&$($mut)? $($lt)? self: Impl, vis: &mut V| {
949 let Impl { generics, of_trait, self_ty, items, constness: _ } = self;
950 try_visit!(vis.visit_generics(generics));
951 if let Some(box of_trait) = of_trait {
952 let TraitImplHeader { defaultness, safety, polarity, trait_ref } = of_trait;
953 visit_visitable!($($mut)? vis, defaultness, safety, polarity, trait_ref);
954 }
955 try_visit!(vis.visit_ty(self_ty));
956 visit_visitable_with!($($mut)? vis, items, AssocCtxt::Impl { of_trait: of_trait.is_some() });
957 V::Result::output()
958 });
959
960 impl_walkable!(|&$($mut)? $($lt)? self: MethodCall, vis: &mut V| {
962 let MethodCall { seg, receiver, args, span } = self;
963 try_visit!(vis.visit_method_receiver_expr(receiver));
964 visit_visitable!($($mut)? vis, seg, args, span);
965 V::Result::output()
966 });
967
968 impl_walkable!(|&$($mut)? $($lt)? self: Expr, vis: &mut V| {
969 let Expr { id, kind, span, attrs, tokens: _ } = self;
970 visit_visitable!($($mut)? vis, id, attrs);
971 match kind {
972 ExprKind::Array(exprs) =>
973 visit_visitable!($($mut)? vis, exprs),
974 ExprKind::ConstBlock(anon_const) =>
975 visit_visitable!($($mut)? vis, anon_const),
976 ExprKind::Repeat(element, count) =>
977 visit_visitable!($($mut)? vis, element, count),
978 ExprKind::Struct(se) =>
979 visit_visitable!($($mut)? vis, se),
980 ExprKind::Tup(exprs) =>
981 visit_visitable!($($mut)? vis, exprs),
982 ExprKind::Call(callee_expression, arguments) =>
983 visit_visitable!($($mut)? vis, callee_expression, arguments),
984 ExprKind::MethodCall(mc) =>
985 visit_visitable!($($mut)? vis, mc),
986 ExprKind::Binary(op, lhs, rhs) =>
987 visit_visitable!($($mut)? vis, op, lhs, rhs),
988 ExprKind::AddrOf(kind, mutbl, subexpression) =>
989 visit_visitable!($($mut)? vis, kind, mutbl, subexpression),
990 ExprKind::Unary(op, subexpression) =>
991 visit_visitable!($($mut)? vis, op, subexpression),
992 ExprKind::Cast(subexpression, typ) | ExprKind::Type(subexpression, typ) =>
993 visit_visitable!($($mut)? vis, subexpression, typ),
994 ExprKind::Let(pat, expr, span, _recovered) =>
995 visit_visitable!($($mut)? vis, pat, expr, span),
996 ExprKind::If(head_expression, if_block, optional_else) =>
997 visit_visitable!($($mut)? vis, head_expression, if_block, optional_else),
998 ExprKind::While(subexpression, block, opt_label) =>
999 visit_visitable!($($mut)? vis, subexpression, block, opt_label),
1000 ExprKind::ForLoop { pat, iter, body, label, kind } =>
1001 visit_visitable!($($mut)? vis, pat, iter, body, label, kind),
1002 ExprKind::Loop(block, opt_label, span) =>
1003 visit_visitable!($($mut)? vis, block, opt_label, span),
1004 ExprKind::Match(subexpression, arms, kind) =>
1005 visit_visitable!($($mut)? vis, subexpression, arms, kind),
1006 ExprKind::Closure(box Closure {
1007 binder,
1008 capture_clause,
1009 coroutine_kind,
1010 constness,
1011 movability,
1012 fn_decl,
1013 body,
1014 fn_decl_span,
1015 fn_arg_span,
1016 }) => {
1017 visit_visitable!($($mut)? vis, constness, movability, capture_clause);
1018 let kind = FnKind::Closure(binder, coroutine_kind, fn_decl, body);
1019 try_visit!(vis.visit_fn(kind, attrs, *span, *id));
1020 visit_visitable!($($mut)? vis, fn_decl_span, fn_arg_span);
1021 }
1022 ExprKind::Block(block, opt_label) =>
1023 visit_visitable!($($mut)? vis, block, opt_label),
1024 ExprKind::Gen(capt, body, kind, decl_span) =>
1025 visit_visitable!($($mut)? vis, capt, body, kind, decl_span),
1026 ExprKind::Await(expr, span) | ExprKind::Use(expr, span) =>
1027 visit_visitable!($($mut)? vis, expr, span),
1028 ExprKind::Assign(lhs, rhs, span) =>
1029 visit_visitable!($($mut)? vis, lhs, rhs, span),
1030 ExprKind::AssignOp(op, lhs, rhs) =>
1031 visit_visitable!($($mut)? vis, op, lhs, rhs),
1032 ExprKind::Field(subexpression, ident) =>
1033 visit_visitable!($($mut)? vis, subexpression, ident),
1034 ExprKind::Index(main_expression, index_expression, span) =>
1035 visit_visitable!($($mut)? vis, main_expression, index_expression, span),
1036 ExprKind::Range(start, end, limit) =>
1037 visit_visitable!($($mut)? vis, start, end, limit),
1038 ExprKind::Underscore => {}
1039 ExprKind::Path(maybe_qself, path) =>
1040 visit_visitable!($($mut)? vis, maybe_qself, path),
1041 ExprKind::Break(opt_label, opt_expr) =>
1042 visit_visitable!($($mut)? vis, opt_label, opt_expr),
1043 ExprKind::Continue(opt_label) =>
1044 visit_visitable!($($mut)? vis, opt_label),
1045 ExprKind::Ret(optional_expression) | ExprKind::Yeet(optional_expression) =>
1046 visit_visitable!($($mut)? vis, optional_expression),
1047 ExprKind::Become(expr) =>
1048 visit_visitable!($($mut)? vis, expr),
1049 ExprKind::MacCall(mac) =>
1050 visit_visitable!($($mut)? vis, mac),
1051 ExprKind::Paren(subexpression) =>
1052 visit_visitable!($($mut)? vis, subexpression),
1053 ExprKind::InlineAsm(asm) =>
1054 visit_visitable!($($mut)? vis, asm),
1055 ExprKind::FormatArgs(f) =>
1056 visit_visitable!($($mut)? vis, f),
1057 ExprKind::OffsetOf(container, fields) =>
1058 visit_visitable!($($mut)? vis, container, fields),
1059 ExprKind::Yield(kind) =>
1060 visit_visitable!($($mut)? vis, kind),
1061 ExprKind::Try(subexpression) =>
1062 visit_visitable!($($mut)? vis, subexpression),
1063 ExprKind::TryBlock(body, optional_type) =>
1064 visit_visitable!($($mut)? vis, body, optional_type),
1065 ExprKind::Lit(token) =>
1066 visit_visitable!($($mut)? vis, token),
1067 ExprKind::IncludedBytes(bytes) =>
1068 visit_visitable!($($mut)? vis, bytes),
1069 ExprKind::UnsafeBinderCast(kind, expr, ty) =>
1070 visit_visitable!($($mut)? vis, kind, expr, ty),
1071 ExprKind::Err(_guar) => {}
1072 ExprKind::Dummy => {}
1073 }
1074
1075 visit_span(vis, span)
1076 });
1077
1078 define_named_walk!($(($mut))? $Visitor$(<$lt>)?
1079 pub fn walk_anon_const(AnonConst);
1080 pub fn walk_arm(Arm);
1081 pub fn walk_assoc_item_constraint(AssocItemConstraint);
1083 pub fn walk_attribute(Attribute);
1084 pub fn walk_block(Block);
1085 pub fn walk_capture_by(CaptureBy);
1087 pub fn walk_closure_binder(ClosureBinder);
1088 pub fn walk_contract(FnContract);
1089 pub fn walk_coroutine_kind(CoroutineKind);
1090 pub fn walk_crate(Crate);
1091 pub fn walk_expr(Expr);
1092 pub fn walk_expr_field(ExprField);
1093 pub fn walk_field_def(FieldDef);
1094 pub fn walk_fn_decl(FnDecl);
1095 pub fn walk_fn_header(FnHeader);
1096 pub fn walk_fn_ret_ty(FnRetTy);
1097 pub fn walk_foreign_mod(ForeignMod);
1099 pub fn walk_format_args(FormatArgs);
1100 pub fn walk_generic_arg(GenericArg);
1101 pub fn walk_generic_args(GenericArgs);
1102 pub fn walk_generic_param(GenericParam);
1103 pub fn walk_generics(Generics);
1104 pub fn walk_inline_asm(InlineAsm);
1105 pub fn walk_inline_asm_sym(InlineAsmSym);
1106 pub fn walk_label(Label);
1108 pub fn walk_lifetime(Lifetime);
1109 pub fn walk_local(Local);
1110 pub fn walk_mac(MacCall);
1111 pub fn walk_macro_def(MacroDef);
1112 pub fn walk_param_bound(GenericBound);
1113 pub fn walk_param(Param);
1114 pub fn walk_pat_field(PatField);
1115 pub fn walk_path(Path);
1116 pub fn walk_path_segment(PathSegment);
1117 pub fn walk_pat(Pat);
1118 pub fn walk_poly_trait_ref(PolyTraitRef);
1119 pub fn walk_precise_capturing_arg(PreciseCapturingArg);
1120 pub fn walk_qself(QSelf);
1121 pub fn walk_impl_restriction(ImplRestriction);
1122 pub fn walk_trait_ref(TraitRef);
1123 pub fn walk_ty_pat(TyPat);
1124 pub fn walk_ty(Ty);
1125 pub fn walk_use_tree(UseTree);
1126 pub fn walk_variant_data(VariantData);
1127 pub fn walk_variant(Variant);
1128 pub fn walk_vis(Visibility);
1129 pub fn walk_where_predicate_kind(WherePredicateKind);
1130 pub fn walk_where_predicate(WherePredicate);
1131 );
1132 };
1133}
1134
1135#[allow(unused_parens, non_local_definitions)]
impl<'a, V: Visitor<'a>> Visitable<'a, V> for ThinVec<(UseTree, NodeId)> {
type Extra = ();
fn visit(&'a self, vis: &mut V, _extra: Self::Extra) -> V::Result {
{
for (nested_tree, nested_id) in self {
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_nested_use_tree(nested_tree,
*nested_id)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
V::Result::output()
}
}
}
fn walk_item_inner<'a, K: WalkItemKind,
V: Visitor<'a>>(visitor: &mut V, item: &'a Item<K>, ctxt: K::Ctxt)
-> V::Result {
let Item { attrs, id, kind, vis, span, tokens: _ } = item;
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(id,
visitor, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(attrs,
visitor, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(vis,
visitor, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
match ::rustc_ast_ir::visit::VisitorResult::branch(kind.walk(attrs, *span,
*id, vis, ctxt, visitor)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
visitor, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
V::Result::output()
}
pub fn walk_item<'a, K: WalkItemKind<Ctxt = ()>,
V: Visitor<'a>>(visitor: &mut V, item: &'a Item<K>) -> V::Result {
walk_item_inner(visitor, item, ())
}
pub fn walk_assoc_item<'a, K: WalkItemKind<Ctxt = AssocCtxt>,
V: Visitor<'a>>(visitor: &mut V, item: &'a Item<K>, ctxt: AssocCtxt)
-> V::Result {
walk_item_inner(visitor, item, ctxt)
}
impl WalkItemKind for ItemKind {
type Ctxt = ();
fn walk<'a,
V: Visitor<'a>>(&'a self, attrs: &AttrVec, span: Span, id: NodeId,
visibility: &'a Visibility, _ctxt: Self::Ctxt, vis: &mut V)
-> V::Result {
match self {
ItemKind::Fn(func) => {
let kind = FnKind::Fn(FnCtxt::Free, visibility, &*func);
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_fn(kind,
attrs, span, id)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::ExternCrate(orig_name, ident) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(orig_name,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Use(use_tree) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(use_tree,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Static(item) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(item,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::ConstBlock(item) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(item,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Const(item) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(item,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Mod(safety, ident, mod_kind) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(safety,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(mod_kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::ForeignMod(nm) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(nm,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::GlobalAsm(asm) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(asm,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::TyAlias(ty_alias) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ty_alias,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Enum(ident, generics, enum_definition) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(generics,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(enum_definition,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Struct(ident, generics, variant_data) |
ItemKind::Union(ident, generics, variant_data) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(generics,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(variant_data,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Impl(impl_) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(impl_,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Trait(trait_) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(trait_,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::TraitAlias(box TraitAlias {
constness, ident, generics, bounds }) => {
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(constness,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(generics,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(bounds,
vis, BoundKind::Bound)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
}
}
ItemKind::MacCall(m) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(m,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::MacroDef(ident, def) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(def,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::Delegation(delegation) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(delegation,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ItemKind::DelegationMac(dm) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(dm,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
}
V::Result::output()
}
}
impl WalkItemKind for AssocItemKind {
type Ctxt = AssocCtxt;
fn walk<'a,
V: Visitor<'a>>(&'a self, attrs: &AttrVec, span: Span, id: NodeId,
visibility: &'a Visibility, ctxt: Self::Ctxt, vis: &mut V)
-> V::Result {
match self {
AssocItemKind::Const(item) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(item,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
AssocItemKind::Fn(func) => {
let kind =
FnKind::Fn(FnCtxt::Assoc(ctxt), visibility, &*func);
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_fn(kind,
attrs, span, id)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
}
}
AssocItemKind::Type(alias) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(alias,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
AssocItemKind::MacCall(mac) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(mac,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
AssocItemKind::Delegation(delegation) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(delegation,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
AssocItemKind::DelegationMac(dm) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(dm,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
}
V::Result::output()
}
}
impl WalkItemKind for ForeignItemKind {
type Ctxt = ();
fn walk<'a,
V: Visitor<'a>>(&'a self, attrs: &AttrVec, span: Span, id: NodeId,
visibility: &'a Visibility, _ctxt: Self::Ctxt, vis: &mut V)
-> V::Result {
match self {
ForeignItemKind::Static(item) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(item,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ForeignItemKind::Fn(func) => {
let kind = FnKind::Fn(FnCtxt::Foreign, visibility, &*func);
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_fn(kind,
attrs, span, id)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
}
}
ForeignItemKind::TyAlias(alias) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(alias,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ForeignItemKind::MacCall(mac) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(mac,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
}
V::Result::output()
}
}
pub fn walk_fn<'a, V: Visitor<'a>>(vis: &mut V, kind: FnKind<'a>)
-> V::Result {
match kind {
FnKind::Fn(_ctxt, _vis, Fn {
defaultness,
ident,
sig,
generics,
contract,
body,
define_opaque,
eii_impls }) => {
let FnSig { header, decl, span } = sig;
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(defaultness,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(header,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(generics,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(decl,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(contract,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(body,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(define_opaque,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(eii_impls,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
}
FnKind::Closure(binder, coroutine_kind, decl, body) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(binder,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(coroutine_kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(decl,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(body,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
}
V::Result::output()
}
#[allow(unused_parens, non_local_definitions)]
impl<'a, V: Visitor<'a>> Walkable<'a, V> for Impl {
fn walk_ref(&'a self, vis: &mut V) -> V::Result {
{
let Impl { generics, of_trait, self_ty, items, constness: _ } =
self;
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_generics(generics))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
if let Some(box of_trait) = of_trait {
let TraitImplHeader { defaultness, safety, polarity, trait_ref
} = of_trait;
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(defaultness,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(safety,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(polarity,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(trait_ref,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
}
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_ty(self_ty))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(items,
vis, AssocCtxt::Impl { of_trait: of_trait.is_some() })) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
V::Result::output()
}
}
}
#[allow(unused_parens, non_local_definitions)]
impl<'a, V: Visitor<'a>> Walkable<'a, V> for MethodCall {
fn walk_ref(&'a self, vis: &mut V) -> V::Result {
{
let MethodCall { seg, receiver, args, span } = self;
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_method_receiver_expr(receiver))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(seg,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(args,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
V::Result::output()
}
}
}
#[allow(unused_parens, non_local_definitions)]
impl<'a, V: Visitor<'a>> Walkable<'a, V> for Expr {
fn walk_ref(&'a self, vis: &mut V) -> V::Result {
{
let Expr { id, kind, span, attrs, tokens: _ } = self;
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(id,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(attrs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
match kind {
ExprKind::Array(exprs) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(exprs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::ConstBlock(anon_const) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(anon_const,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Repeat(element, count) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(element,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(count,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Struct(se) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(se,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Tup(exprs) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(exprs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Call(callee_expression, arguments) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(callee_expression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(arguments,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::MethodCall(mc) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(mc,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Binary(op, lhs, rhs) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(op,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(lhs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(rhs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::AddrOf(kind, mutbl, subexpression) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(mutbl,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Unary(op, subexpression) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(op,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Cast(subexpression, typ) |
ExprKind::Type(subexpression, typ) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(typ,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Let(pat, expr, span, _recovered) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(pat,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(expr,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::If(head_expression, if_block, optional_else) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(head_expression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(if_block,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(optional_else,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::While(subexpression, block, opt_label) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(block,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(opt_label,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::ForLoop { pat, iter, body, label, kind } => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(pat,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(iter,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(body,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(label,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Loop(block, opt_label, span) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(block,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(opt_label,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Match(subexpression, arms, kind) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(arms,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Closure(box Closure {
binder,
capture_clause,
coroutine_kind,
constness,
movability,
fn_decl,
body,
fn_decl_span,
fn_arg_span }) => {
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(constness,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(movability,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(capture_clause,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
let kind =
FnKind::Closure(binder, coroutine_kind, fn_decl, body);
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_fn(kind,
attrs, *span, *id)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
{
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(fn_decl_span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(fn_arg_span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
}
ExprKind::Block(block, opt_label) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(block,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(opt_label,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Gen(capt, body, kind, decl_span) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(capt,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(body,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(decl_span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Await(expr, span) | ExprKind::Use(expr, span) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(expr,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Assign(lhs, rhs, span) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(lhs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(rhs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::AssignOp(op, lhs, rhs) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(op,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(lhs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(rhs,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Field(subexpression, ident) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ident,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Index(main_expression, index_expression, span) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(main_expression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(index_expression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(span,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Range(start, end, limit) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(start,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(end,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(limit,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Underscore => {}
ExprKind::Path(maybe_qself, path) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(maybe_qself,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(path,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Break(opt_label, opt_expr) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(opt_label,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(opt_expr,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Continue(opt_label) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(opt_label,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Ret(optional_expression) |
ExprKind::Yeet(optional_expression) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(optional_expression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Become(expr) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(expr,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::MacCall(mac) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(mac,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Paren(subexpression) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::InlineAsm(asm) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(asm,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::FormatArgs(f) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(f,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::OffsetOf(container, fields) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(container,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(fields,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Yield(kind) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Try(subexpression) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(subexpression,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::TryBlock(body, optional_type) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(body,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(optional_type,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Lit(token) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(token,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::IncludedBytes(bytes) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(bytes,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::UnsafeBinderCast(kind, expr, ty) => {
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(kind,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(expr,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
match ::rustc_ast_ir::visit::VisitorResult::branch(Visitable::visit(ty,
vis, ())) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
}
ExprKind::Err(_guar) => {}
ExprKind::Dummy => {}
}
visit_span(vis, span)
}
}
}
pub fn walk_anon_const<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a AnonConst) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_arm<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Arm)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_assoc_item_constraint<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a AssocItemConstraint)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_attribute<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a Attribute) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_block<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Block)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_capture_by<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a CaptureBy) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_closure_binder<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a ClosureBinder) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_contract<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a FnContract) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_coroutine_kind<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a CoroutineKind) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Crate)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_expr<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Expr)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_expr_field<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a ExprField) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_field_def<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a FieldDef)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_fn_decl<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a FnDecl)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_fn_header<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a FnHeader)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_fn_ret_ty<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a FnRetTy)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_foreign_mod<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a ForeignMod) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_format_args<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a FormatArgs) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_generic_arg<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a GenericArg) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_generic_args<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a GenericArgs) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_generic_param<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a GenericParam) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_generics<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Generics)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_inline_asm<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a InlineAsm) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_inline_asm_sym<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a InlineAsmSym) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_label<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Label)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_lifetime<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Lifetime)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_local<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Local)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_mac<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a MacCall)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_macro_def<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a MacroDef)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_param_bound<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a GenericBound) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_param<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Param)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_pat_field<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a PatField)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_path<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Path)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_path_segment<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a PathSegment) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Pat)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_poly_trait_ref<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a PolyTraitRef) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_precise_capturing_arg<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a PreciseCapturingArg)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_qself<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a QSelf)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_impl_restriction<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a ImplRestriction) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_trait_ref<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a TraitRef)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_ty_pat<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a TyPat)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_ty<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Ty)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_use_tree<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a UseTree)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_variant_data<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a VariantData) -> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_variant<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Variant)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_vis<'a, V: Visitor<'a>>(visitor: &mut V, node: &'a Visibility)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_where_predicate_kind<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a WherePredicateKind)
-> V::Result {
Walkable::walk_ref(node, visitor)
}
pub fn walk_where_predicate<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a WherePredicate) -> V::Result {
Walkable::walk_ref(node, visitor)
}common_visitor_and_walkers!(Visitor<'a>);
1136
1137macro_rules! generate_list_visit_fns {
1138 ($($name:ident, $Ty:ty, $visit_fn:ident$(, $param:ident: $ParamTy:ty)*;)+) => {
1139 $(
1140 #[allow(unused_parens)]
1141 impl<'a, V: Visitor<'a>> Visitable<'a, V> for ThinVec<$Ty> {
1142 type Extra = ($($ParamTy),*);
1143
1144 #[inline]
1145 fn visit(
1146 &'a self,
1147 visitor: &mut V,
1148 ($($param),*): Self::Extra,
1149 ) -> V::Result {
1150 $name(visitor, self $(, $param)*)
1151 }
1152 }
1153
1154 fn $name<'a, V: Visitor<'a>>(
1155 vis: &mut V,
1156 values: &'a ThinVec<$Ty>,
1157 $(
1158 $param: $ParamTy,
1159 )*
1160 ) -> V::Result {
1161 walk_list!(vis, $visit_fn, values$(,$param)*);
1162 V::Result::output()
1163 }
1164 )+
1165 }
1166}
1167
1168#[allow(unused_parens)]
impl<'a, V: Visitor<'a>> Visitable<'a, V> for ThinVec<Arm> {
type Extra = ();
#[inline]
fn visit(&'a self, visitor: &mut V, (): Self::Extra) -> V::Result {
visit_arms(visitor, self)
}
}
fn visit_arms<'a, V: Visitor<'a>>(vis: &mut V, values: &'a ThinVec<Arm>)
-> V::Result {
for elem in values {
match ::rustc_ast_ir::visit::VisitorResult::branch(vis.visit_arm(elem))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};
V::Result::output()
}generate_list_visit_fns! {
1169 visit_items, Box<Item>, visit_item;
1170 visit_foreign_items, Box<ForeignItem>, visit_foreign_item;
1171 visit_generic_params, GenericParam, visit_generic_param;
1172 visit_stmts, Stmt, visit_stmt;
1173 visit_exprs, Box<Expr>, visit_expr;
1174 visit_expr_fields, ExprField, visit_expr_field;
1175 visit_pat_fields, PatField, visit_pat_field;
1176 visit_variants, Variant, visit_variant;
1177 visit_assoc_items, Box<AssocItem>, visit_assoc_item, ctxt: AssocCtxt;
1178 visit_where_predicates, WherePredicate, visit_where_predicate;
1179 visit_params, Param, visit_param;
1180 visit_field_defs, FieldDef, visit_field_def;
1181 visit_arms, Arm, visit_arm;
1182}
1183
1184pub fn walk_stmt<'a, V: Visitor<'a>>(visitor: &mut V, statement: &'a Stmt) -> V::Result {
1185 let Stmt { id, kind, span: _ } = statement;
1186 match ::rustc_ast_ir::visit::VisitorResult::branch(visitor.visit_id(*id)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(visitor.visit_id(*id));
1187 match kind {
1188 StmtKind::Let(local) => match ::rustc_ast_ir::visit::VisitorResult::branch(visitor.visit_local(local))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
}try_visit!(visitor.visit_local(local)),
1189 StmtKind::Item(item) => match ::rustc_ast_ir::visit::VisitorResult::branch(visitor.visit_item(item)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
}try_visit!(visitor.visit_item(item)),
1190 StmtKind::Expr(expr) | StmtKind::Semi(expr) => match ::rustc_ast_ir::visit::VisitorResult::branch(visitor.visit_expr(expr)) {
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
}try_visit!(visitor.visit_expr(expr)),
1191 StmtKind::Empty => {}
1192 StmtKind::MacCall(mac) => {
1193 let MacCallStmt { mac, attrs, style: _, tokens: _ } = &**mac;
1194 for elem in attrs {
match ::rustc_ast_ir::visit::VisitorResult::branch(visitor.visit_attribute(elem))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};
};walk_list!(visitor, visit_attribute, attrs);
1195 match ::rustc_ast_ir::visit::VisitorResult::branch(visitor.visit_mac_call(mac))
{
core::ops::ControlFlow::Continue(()) =>
(),
#[allow(unreachable_code)]
core::ops::ControlFlow::Break(r) => {
return ::rustc_ast_ir::visit::VisitorResult::from_residual(r);
}
};try_visit!(visitor.visit_mac_call(mac));
1196 }
1197 }
1198 V::Result::output()
1199}