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<GenericBound>,
390 ThinVec<Ident>,
391 ThinVec<(Ident, Option<Ident>)>,
392 ThinVec<(NodeId, Path)>,
393 ThinVec<PathSegment>,
394 ThinVec<PreciseCapturingArg>,
395 ThinVec<Pat>,
396 ThinVec<Box<Ty>>,
397 ThinVec<TyPat>,
398 ThinVec<EiiImpl>,
399 );
400
401 impl_visitable_direct!(<$($lt)? $($mut)?>
405 AngleBracketedArg,
406 AngleBracketedArgs,
407 AsmMacro,
408 AssignOpKind,
409 AssocItemConstraintKind,
410 AttrArgs,
411 AttrItem,
412 AttrKind,
413 AttrStyle,
414 FnPtrTy,
415 BindingMode,
416 GenBlockKind,
417 RangeLimits,
418 UnsafeBinderCastKind,
419 BinOpKind,
420 BlockCheckMode,
421 MgcaDisambiguation,
422 BorrowKind,
423 BoundAsyncness,
424 BoundConstness,
425 BoundPolarity,
426 ByRef,
427 Closure,
428 Const,
429 ConstBlockItem,
430 ConstItem,
431 ConstItemRhsKind,
432 Defaultness,
433 Delegation,
434 DelegationMac,
435 DelegationSuffixes,
436 DelimArgs,
437 DelimSpan,
438 EnumDef,
439 Extern,
440 ForLoopKind,
441 FormatArgPosition,
442 FormatArgsPiece,
443 FormatArgument,
444 FormatArgumentKind,
445 FormatArguments,
446 FormatPlaceholder,
447 GenericParamKind,
448 Guard,
449 Impl,
450 ImplPolarity,
451 Inline,
452 InlineAsmOperand,
453 InlineAsmRegOrRegClass,
454 InlineAsmTemplatePiece,
455 IsAuto,
456 LocalKind,
457 MacCallStmt,
458 MacStmtStyle,
459 MatchKind,
460 MethodCall,
461 ModKind,
462 ModSpans,
463 MutTy,
464 NormalAttr,
465 AttrItemKind,
466 Parens,
467 ParenthesizedArgs,
468 PatFieldsRest,
469 PatKind,
470 RangeEnd,
471 RangeSyntax,
472 Recovered,
473 RestrictionKind,
474 Safety,
475 StaticItem,
476 StrLit,
477 StrStyle,
478 StructExpr,
479 StructRest,
480 Term,
481 Trait,
482 TraitBoundModifiers,
483 TraitObjectSyntax,
484 TyAlias,
485 TyKind,
486 TyPatKind,
487 UnOp,
488 UnsafeBinderTy,
489 UnsafeSource,
490 UseTreeKind,
491 VisibilityKind,
492 WhereBoundPredicate,
493 WhereClause,
494 WhereEqPredicate,
495 WhereRegionPredicate,
496 YieldKind,
497 EiiDecl,
498 EiiImpl,
499 );
500
501 #[doc = concat!(" e.g., the `visit_item` method by default calls `visit"$(, "_", stringify!($mut))?, "::walk_item`.")]
505 pub trait $Visitor<$($lt)?> : Sized $(${ignore($mut)} + MutVisitorResult<Result = ()>)? {
515 $(
516 ${ignore($lt)}
517 type Result: VisitorResult = ();
520 )?
521
522 fn visit_ident(&mut self, Ident { name: _, span }: &$($lt)? $($mut)? Ident) -> Self::Result {
550 impl_visitable!(|&$($lt)? $($mut)? self: Ident, visitor: &mut V, _extra: ()| {
551 visitor.visit_ident(self)
552 });
553 visit_span(self, span)
554 }
555
556 impl_visitable_calling_walkable!(<$($lt)? $($mut)?>
560 fn visit_anon_const(AnonConst);
561 fn visit_arm(Arm);
562 fn visit_assoc_item_constraint(AssocItemConstraint);
564 fn visit_attribute(Attribute);
565 fn visit_block(Block);
566 fn visit_capture_by(CaptureBy);
568 fn visit_closure_binder(ClosureBinder);
569 fn visit_contract(FnContract);
570 fn visit_coroutine_kind(CoroutineKind);
571 fn visit_crate(Crate);
572 fn visit_expr(Expr);
573 fn visit_expr_field(ExprField);
574 fn visit_field_def(FieldDef);
575 fn visit_fn_decl(FnDecl);
576 fn visit_fn_header(FnHeader);
577 fn visit_fn_ret_ty(FnRetTy);
578 fn visit_foreign_mod(ForeignMod);
580 fn visit_format_args(FormatArgs);
581 fn visit_generic_arg(GenericArg);
582 fn visit_generic_args(GenericArgs);
583 fn visit_generic_param(GenericParam);
584 fn visit_generics(Generics);
585 fn visit_inline_asm(InlineAsm);
586 fn visit_inline_asm_sym(InlineAsmSym);
587 fn visit_impl_restriction(ImplRestriction);
588 fn visit_label(Label);
590 fn visit_lifetime(Lifetime, _ctxt: LifetimeCtxt);
591 fn visit_local(Local);
592 fn visit_mac_call(MacCall);
593 fn visit_macro_def(MacroDef);
594 fn visit_mut_restriction(MutRestriction);
595 fn visit_param_bound(GenericBound, _ctxt: BoundKind);
596 fn visit_param(Param);
597 fn visit_pat_field(PatField);
598 fn visit_path(Path);
599 fn visit_path_segment(PathSegment);
600 fn visit_pat(Pat);
601 fn visit_poly_trait_ref(PolyTraitRef);
602 fn visit_precise_capturing_arg(PreciseCapturingArg);
603 fn visit_qself(QSelf);
604 fn visit_trait_ref(TraitRef);
605 fn visit_ty_pat(TyPat);
606 fn visit_ty(Ty);
607 fn visit_use_tree(UseTree);
608 fn visit_variant_data(VariantData);
609 fn visit_variant(Variant);
610 fn visit_vis(Visibility);
611 fn visit_where_predicate_kind(WherePredicateKind);
612 fn visit_where_predicate(WherePredicate);
613 );
614
615 fn visit_id(&mut self, _id: $(&$mut)? NodeId) -> Self::Result {
617 $(impl_visitable!(
618 |&$lt self: NodeId, visitor: &mut V, _extra: ()| {
619 visitor.visit_id(*self)
620 }
621 );)?
622 $(impl_visitable!(
623 |&$mut self: NodeId, visitor: &mut V, _extra: ()| {
624 visitor.visit_id(self)
625 }
626 );)?
627 Self::Result::output()
628 }
629
630 fn visit_method_receiver_expr(&mut self, ex: &$($lt)? $($mut)? Expr) -> Self::Result {
633 self.visit_expr(ex)
634 }
635
636 fn visit_item(&mut self, item: &$($lt)? $($mut)? Item) -> Self::Result {
637 impl_visitable!(|&$($lt)? $($mut)? self: Item, vis: &mut V, _extra: ()| {
638 vis.visit_item(self)
639 });
640 walk_item(self, item)
641 }
642
643 fn visit_foreign_item(&mut self, item: &$($lt)? $($mut)? ForeignItem) -> Self::Result {
644 impl_visitable!(|&$($lt)? $($mut)? self: ForeignItem, vis: &mut V, _extra: ()| {
645 vis.visit_foreign_item(self)
646 });
647 walk_item(self, item)
648 }
649
650 fn visit_assoc_item(&mut self, item: &$($lt)? $($mut)? AssocItem, ctxt: AssocCtxt) -> Self::Result {
651 impl_visitable!(|&$($lt)? $($mut)? self: AssocItem, vis: &mut V, ctxt: AssocCtxt| {
652 vis.visit_assoc_item(self, ctxt)
653 });
654 walk_assoc_item(self, item, ctxt)
655 }
656
657 fn visit_fn(
659 &mut self,
660 fk: FnKind<$($lt)? $(${ignore($mut)} '_)?>,
661 _: &AttrVec,
662 _: Span,
663 _: NodeId,
664 ) -> Self::Result {
665 walk_fn(self, fk)
666 }
667
668 $(
670 fn visit_stmt(&mut self, s: &$lt Stmt) -> Self::Result {
671 walk_stmt(self, s)
672 }
673
674 fn visit_nested_use_tree(&mut self, use_tree: &$lt UseTree, id: NodeId) -> Self::Result {
675 try_visit!(self.visit_id(id));
676 self.visit_use_tree(use_tree)
677 }
678 )?
679
680 $(
682 #[inline]
685 fn visit_span(&mut self, _sp: &$mut Span) {
686 impl_visitable!(|&mut self: Span, visitor: &mut V, _extra: ()| {
687 visitor.visit_span(self)
688 });
689 }
691
692 fn flat_map_foreign_item(&mut self, ni: Box<ForeignItem>) -> SmallVec<[Box<ForeignItem>; 1]> {
693 walk_flat_map_foreign_item(self, ni)
694 }
695
696 fn flat_map_item(&mut self, i: Box<Item>) -> SmallVec<[Box<Item>; 1]> {
697 walk_flat_map_item(self, i)
698 }
699
700 fn flat_map_field_def(&mut self, fd: FieldDef) -> SmallVec<[FieldDef; 1]> {
701 walk_flat_map_field_def(self, fd)
702 }
703
704 fn flat_map_assoc_item(
705 &mut self,
706 i: Box<AssocItem>,
707 ctxt: AssocCtxt,
708 ) -> SmallVec<[Box<AssocItem>; 1]> {
709 walk_flat_map_assoc_item(self, i, ctxt)
710 }
711
712 fn flat_map_stmt(&mut self, s: Stmt) -> SmallVec<[Stmt; 1]> {
713 walk_flat_map_stmt(self, s)
714 }
715
716 fn flat_map_arm(&mut self, arm: Arm) -> SmallVec<[Arm; 1]> {
717 walk_flat_map_arm(self, arm)
718 }
719
720 fn filter_map_expr(&mut self, e: Box<Expr>) -> Option<Box<Expr>> {
721 walk_filter_map_expr(self, e)
722 }
723
724 fn flat_map_variant(&mut self, v: Variant) -> SmallVec<[Variant; 1]> {
725 walk_flat_map_variant(self, v)
726 }
727
728 fn flat_map_param(&mut self, param: Param) -> SmallVec<[Param; 1]> {
729 walk_flat_map_param(self, param)
730 }
731
732 fn flat_map_generic_param(&mut self, param: GenericParam) -> SmallVec<[GenericParam; 1]> {
733 walk_flat_map_generic_param(self, param)
734 }
735
736 fn flat_map_expr_field(&mut self, f: ExprField) -> SmallVec<[ExprField; 1]> {
737 walk_flat_map_expr_field(self, f)
738 }
739
740 fn flat_map_where_predicate(
741 &mut self,
742 where_predicate: WherePredicate,
743 ) -> SmallVec<[WherePredicate; 1]> {
744 walk_flat_map_where_predicate(self, where_predicate)
745 }
746
747 fn flat_map_pat_field(&mut self, fp: PatField) -> SmallVec<[PatField; 1]> {
748 walk_flat_map_pat_field(self, fp)
749 }
750 )?
751 }
752
753 pub trait WalkItemKind {
754 type Ctxt;
755 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
756 &$($lt)? $($mut)? self,
757 attrs: &AttrVec,
758 span: Span,
759 id: NodeId,
760 visibility: &$($lt)? $($mut)? Visibility,
761 ctxt: Self::Ctxt,
762 vis: &mut V,
763 ) -> V::Result;
764 }
765
766 $(${ignore($lt)}
769 #[expect(unused, rustc::disallowed_pass_by_ref)]
770 #[inline]
771 )?
772 fn visit_span<$($lt,)? V: $Visitor$(<$lt>)?>(vis: &mut V, span: &$($lt)? $($mut)? Span) -> V::Result {
773 $(${ignore($mut)} vis.visit_span(span))?;
774 V::Result::output()
775 }
776
777 $(impl_visitable!(|&$lt self: ThinVec<(UseTree, NodeId)>, vis: &mut V, _extra: ()| {
778 for (nested_tree, nested_id) in self {
779 try_visit!(vis.visit_nested_use_tree(nested_tree, *nested_id));
780 }
781 V::Result::output()
782 });)?
783 $(impl_visitable_list!(<$mut> ThinVec<(UseTree, NodeId)>,);)?
784
785 fn walk_item_inner<$($lt,)? K: WalkItemKind, V: $Visitor$(<$lt>)?>(
786 visitor: &mut V,
787 item: &$($mut)? $($lt)? Item<K>,
788 ctxt: K::Ctxt,
789 ) -> V::Result {
790 let Item { attrs, id, kind, vis, span, tokens: _ } = item;
791 visit_visitable!($($mut)? visitor, id, attrs, vis);
792 try_visit!(kind.walk(attrs, *span, *id, vis, ctxt, visitor));
793 visit_visitable!($($mut)? visitor, span);
794 V::Result::output()
795 }
796
797 pub fn walk_item<$($lt,)? K: WalkItemKind<Ctxt = ()>, V: $Visitor$(<$lt>)?>(
799 visitor: &mut V,
800 item: &$($mut)? $($lt)? Item<K>,
801 ) -> V::Result {
802 walk_item_inner(visitor, item, ())
803 }
804
805 pub fn walk_assoc_item<$($lt,)? K: WalkItemKind<Ctxt = AssocCtxt>, V: $Visitor$(<$lt>)?>(
807 visitor: &mut V,
808 item: &$($mut)? $($lt)? Item<K>,
809 ctxt: AssocCtxt,
810 ) -> V::Result {
811 walk_item_inner(visitor, item, ctxt)
812 }
813
814 impl WalkItemKind for ItemKind {
815 type Ctxt = ();
816 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
817 &$($lt)? $($mut)? self,
818 attrs: &AttrVec,
819 span: Span,
820 id: NodeId,
821 visibility: &$($lt)? $($mut)? Visibility,
822 _ctxt: Self::Ctxt,
823 vis: &mut V,
824 ) -> V::Result {
825 match self {
826 ItemKind::Fn(func) => {
827 let kind = FnKind::Fn(FnCtxt::Free, visibility, &$($mut)? *func);
828 try_visit!(vis.visit_fn(kind, attrs, span, id));
829 }
830 ItemKind::ExternCrate(orig_name, ident) =>
831 visit_visitable!($($mut)? vis, orig_name, ident),
832 ItemKind::Use(use_tree) =>
833 visit_visitable!($($mut)? vis, use_tree),
834 ItemKind::Static(item) =>
835 visit_visitable!($($mut)? vis, item),
836 ItemKind::ConstBlock(item) =>
837 visit_visitable!($($mut)? vis, item),
838 ItemKind::Const(item) =>
839 visit_visitable!($($mut)? vis, item),
840 ItemKind::Mod(safety, ident, mod_kind) =>
841 visit_visitable!($($mut)? vis, safety, ident, mod_kind),
842 ItemKind::ForeignMod(nm) =>
843 visit_visitable!($($mut)? vis, nm),
844 ItemKind::GlobalAsm(asm) =>
845 visit_visitable!($($mut)? vis, asm),
846 ItemKind::TyAlias(ty_alias) =>
847 visit_visitable!($($mut)? vis, ty_alias),
848 ItemKind::Enum(ident, generics, enum_definition) =>
849 visit_visitable!($($mut)? vis, ident, generics, enum_definition),
850 ItemKind::Struct(ident, generics, variant_data)
851 | ItemKind::Union(ident, generics, variant_data) =>
852 visit_visitable!($($mut)? vis, ident, generics, variant_data),
853 ItemKind::Impl(impl_) =>
854 visit_visitable!($($mut)? vis, impl_),
855 ItemKind::Trait(trait_) =>
856 visit_visitable!($($mut)? vis, trait_),
857 ItemKind::TraitAlias(TraitAlias { constness, ident, generics, bounds}) => {
858 visit_visitable!($($mut)? vis, constness, ident, generics);
859 visit_visitable_with!($($mut)? vis, bounds, BoundKind::Bound)
860 }
861 ItemKind::MacCall(m) =>
862 visit_visitable!($($mut)? vis, m),
863 ItemKind::MacroDef(ident, def) =>
864 visit_visitable!($($mut)? vis, ident, def),
865 ItemKind::Delegation(delegation) =>
866 visit_visitable!($($mut)? vis, delegation),
867 ItemKind::DelegationMac(dm) =>
868 visit_visitable!($($mut)? vis, dm),
869 }
870 V::Result::output()
871 }
872 }
873
874 impl WalkItemKind for AssocItemKind {
875 type Ctxt = AssocCtxt;
876 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
877 &$($lt)? $($mut)? self,
878 attrs: &AttrVec,
879 span: Span,
880 id: NodeId,
881 visibility: &$($lt)? $($mut)? Visibility,
882 ctxt: Self::Ctxt,
883 vis: &mut V,
884 ) -> V::Result {
885 match self {
886 AssocItemKind::Const(item) =>
887 visit_visitable!($($mut)? vis, item),
888 AssocItemKind::Fn(func) => {
889 let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), visibility, &$($mut)? *func);
890 try_visit!(vis.visit_fn(kind, attrs, span, id))
891 }
892 AssocItemKind::Type(alias) =>
893 visit_visitable!($($mut)? vis, alias),
894 AssocItemKind::MacCall(mac) =>
895 visit_visitable!($($mut)? vis, mac),
896 AssocItemKind::Delegation(delegation) =>
897 visit_visitable!($($mut)? vis, delegation),
898 AssocItemKind::DelegationMac(dm) =>
899 visit_visitable!($($mut)? vis, dm),
900 }
901 V::Result::output()
902 }
903 }
904
905 impl WalkItemKind for ForeignItemKind {
906 type Ctxt = ();
907 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
908 &$($lt)? $($mut)? self,
909 attrs: &AttrVec,
910 span: Span,
911 id: NodeId,
912 visibility: &$($lt)? $($mut)? Visibility,
913 _ctxt: Self::Ctxt,
914 vis: &mut V,
915 ) -> V::Result {
916 match self {
917 ForeignItemKind::Static(item) =>
918 visit_visitable!($($mut)? vis, item),
919 ForeignItemKind::Fn(func) => {
920 let kind = FnKind::Fn(FnCtxt::Foreign, visibility, &$($mut)?*func);
921 try_visit!(vis.visit_fn(kind, attrs, span, id))
922 }
923 ForeignItemKind::TyAlias(alias) =>
924 visit_visitable!($($mut)? vis, alias),
925 ForeignItemKind::MacCall(mac) =>
926 visit_visitable!($($mut)? vis, mac),
927 }
928 V::Result::output()
929 }
930 }
931
932 pub fn walk_fn<$($lt,)? V: $Visitor$(<$lt>)?>(vis: &mut V, kind: FnKind<$($lt)? $(${ignore($mut)} '_)?>) -> V::Result {
933 match kind {
934 FnKind::Fn(
935 _ctxt,
936 _vis,
938 Fn { defaultness, ident, sig, generics, contract, body, define_opaque, eii_impls },
939 ) => {
940 let FnSig { header, decl, span } = sig;
941 visit_visitable!($($mut)? vis,
942 defaultness, ident, header, generics, decl,
943 contract, body, span, define_opaque, eii_impls
944 );
945 }
946 FnKind::Closure(binder, coroutine_kind, decl, body) =>
947 visit_visitable!($($mut)? vis, binder, coroutine_kind, decl, body),
948 }
949 V::Result::output()
950 }
951
952 impl_walkable!(|&$($mut)? $($lt)? self: Impl, vis: &mut V| {
953 let Impl { generics, of_trait, self_ty, items, constness: _ } = self;
954 try_visit!(vis.visit_generics(generics));
955 if let Some(of_trait) = of_trait {
956 let TraitImplHeader { defaultness, safety, polarity, trait_ref } = of_trait;
957 visit_visitable!($($mut)? vis, defaultness, safety, polarity, trait_ref);
958 }
959 try_visit!(vis.visit_ty(self_ty));
960 visit_visitable_with!($($mut)? vis, items, AssocCtxt::Impl { of_trait: of_trait.is_some() });
961 V::Result::output()
962 });
963
964 impl_walkable!(|&$($mut)? $($lt)? self: MethodCall, vis: &mut V| {
966 let MethodCall { seg, receiver, args, span } = self;
967 try_visit!(vis.visit_method_receiver_expr(receiver));
968 visit_visitable!($($mut)? vis, seg, args, span);
969 V::Result::output()
970 });
971
972 impl_walkable!(|&$($mut)? $($lt)? self: Expr, vis: &mut V| {
973 let Expr { id, kind, span, attrs, tokens: _ } = self;
974 visit_visitable!($($mut)? vis, id, attrs);
975 match kind {
976 ExprKind::Array(exprs) =>
977 visit_visitable!($($mut)? vis, exprs),
978 ExprKind::ConstBlock(anon_const) =>
979 visit_visitable!($($mut)? vis, anon_const),
980 ExprKind::Repeat(element, count) =>
981 visit_visitable!($($mut)? vis, element, count),
982 ExprKind::Struct(se) =>
983 visit_visitable!($($mut)? vis, se),
984 ExprKind::Tup(exprs) =>
985 visit_visitable!($($mut)? vis, exprs),
986 ExprKind::Call(callee_expression, arguments) =>
987 visit_visitable!($($mut)? vis, callee_expression, arguments),
988 ExprKind::MethodCall(mc) =>
989 visit_visitable!($($mut)? vis, mc),
990 ExprKind::Binary(op, lhs, rhs) =>
991 visit_visitable!($($mut)? vis, op, lhs, rhs),
992 ExprKind::AddrOf(kind, mutbl, subexpression) =>
993 visit_visitable!($($mut)? vis, kind, mutbl, subexpression),
994 ExprKind::Unary(op, subexpression) =>
995 visit_visitable!($($mut)? vis, op, subexpression),
996 ExprKind::Cast(subexpression, typ) | ExprKind::Type(subexpression, typ) =>
997 visit_visitable!($($mut)? vis, subexpression, typ),
998 ExprKind::Let(pat, expr, span, _recovered) =>
999 visit_visitable!($($mut)? vis, pat, expr, span),
1000 ExprKind::If(head_expression, if_block, optional_else) =>
1001 visit_visitable!($($mut)? vis, head_expression, if_block, optional_else),
1002 ExprKind::While(subexpression, block, opt_label) =>
1003 visit_visitable!($($mut)? vis, subexpression, block, opt_label),
1004 ExprKind::ForLoop { pat, iter, body, label, kind } =>
1005 visit_visitable!($($mut)? vis, pat, iter, body, label, kind),
1006 ExprKind::Loop(block, opt_label, span) =>
1007 visit_visitable!($($mut)? vis, block, opt_label, span),
1008 ExprKind::Match(subexpression, arms, kind) =>
1009 visit_visitable!($($mut)? vis, subexpression, arms, kind),
1010 ExprKind::Closure(Closure {
1011 binder,
1012 capture_clause,
1013 coroutine_kind,
1014 constness,
1015 movability,
1016 fn_decl,
1017 body,
1018 fn_decl_span,
1019 fn_arg_span,
1020 }) => {
1021 visit_visitable!($($mut)? vis, constness, movability, capture_clause);
1022 let kind = FnKind::Closure(binder, coroutine_kind, fn_decl, body);
1023 try_visit!(vis.visit_fn(kind, attrs, *span, *id));
1024 visit_visitable!($($mut)? vis, fn_decl_span, fn_arg_span);
1025 }
1026 ExprKind::Block(block, opt_label) =>
1027 visit_visitable!($($mut)? vis, block, opt_label),
1028 ExprKind::Gen(capt, body, kind, decl_span) =>
1029 visit_visitable!($($mut)? vis, capt, body, kind, decl_span),
1030 ExprKind::Await(expr, span)
1031 | ExprKind::Move(expr, span)
1032 | ExprKind::Use(expr, span) =>
1033 visit_visitable!($($mut)? vis, expr, span),
1034 ExprKind::Assign(lhs, rhs, span) =>
1035 visit_visitable!($($mut)? vis, lhs, rhs, span),
1036 ExprKind::AssignOp(op, lhs, rhs) =>
1037 visit_visitable!($($mut)? vis, op, lhs, rhs),
1038 ExprKind::Field(subexpression, ident) =>
1039 visit_visitable!($($mut)? vis, subexpression, ident),
1040 ExprKind::Index(main_expression, index_expression, span) =>
1041 visit_visitable!($($mut)? vis, main_expression, index_expression, span),
1042 ExprKind::Range(start, end, limit) =>
1043 visit_visitable!($($mut)? vis, start, end, limit),
1044 ExprKind::Underscore => {}
1045 ExprKind::Path(maybe_qself, path) =>
1046 visit_visitable!($($mut)? vis, maybe_qself, path),
1047 ExprKind::Break(opt_label, opt_expr) =>
1048 visit_visitable!($($mut)? vis, opt_label, opt_expr),
1049 ExprKind::Continue(opt_label) =>
1050 visit_visitable!($($mut)? vis, opt_label),
1051 ExprKind::Ret(optional_expression) | ExprKind::Yeet(optional_expression) =>
1052 visit_visitable!($($mut)? vis, optional_expression),
1053 ExprKind::Become(expr) =>
1054 visit_visitable!($($mut)? vis, expr),
1055 ExprKind::MacCall(mac) =>
1056 visit_visitable!($($mut)? vis, mac),
1057 ExprKind::Paren(subexpression) =>
1058 visit_visitable!($($mut)? vis, subexpression),
1059 ExprKind::InlineAsm(asm) =>
1060 visit_visitable!($($mut)? vis, asm),
1061 ExprKind::FormatArgs(f) =>
1062 visit_visitable!($($mut)? vis, f),
1063 ExprKind::OffsetOf(container, fields) =>
1064 visit_visitable!($($mut)? vis, container, fields),
1065 ExprKind::Yield(kind) =>
1066 visit_visitable!($($mut)? vis, kind),
1067 ExprKind::Try(subexpression) =>
1068 visit_visitable!($($mut)? vis, subexpression),
1069 ExprKind::TryBlock(body, optional_type) =>
1070 visit_visitable!($($mut)? vis, body, optional_type),
1071 ExprKind::Lit(token) =>
1072 visit_visitable!($($mut)? vis, token),
1073 ExprKind::IncludedBytes(bytes) =>
1074 visit_visitable!($($mut)? vis, bytes),
1075 ExprKind::UnsafeBinderCast(kind, expr, ty) =>
1076 visit_visitable!($($mut)? vis, kind, expr, ty),
1077 ExprKind::Err(_guar) => {}
1078 ExprKind::Dummy => {}
1079 }
1080
1081 visit_span(vis, span)
1082 });
1083
1084 define_named_walk!($(($mut))? $Visitor$(<$lt>)?
1085 pub fn walk_anon_const(AnonConst);
1086 pub fn walk_arm(Arm);
1087 pub fn walk_assoc_item_constraint(AssocItemConstraint);
1089 pub fn walk_attribute(Attribute);
1090 pub fn walk_block(Block);
1091 pub fn walk_capture_by(CaptureBy);
1093 pub fn walk_closure_binder(ClosureBinder);
1094 pub fn walk_contract(FnContract);
1095 pub fn walk_coroutine_kind(CoroutineKind);
1096 pub fn walk_crate(Crate);
1097 pub fn walk_expr(Expr);
1098 pub fn walk_expr_field(ExprField);
1099 pub fn walk_field_def(FieldDef);
1100 pub fn walk_fn_decl(FnDecl);
1101 pub fn walk_fn_header(FnHeader);
1102 pub fn walk_fn_ret_ty(FnRetTy);
1103 pub fn walk_foreign_mod(ForeignMod);
1105 pub fn walk_format_args(FormatArgs);
1106 pub fn walk_generic_arg(GenericArg);
1107 pub fn walk_generic_args(GenericArgs);
1108 pub fn walk_generic_param(GenericParam);
1109 pub fn walk_generics(Generics);
1110 pub fn walk_inline_asm(InlineAsm);
1111 pub fn walk_inline_asm_sym(InlineAsmSym);
1112 pub fn walk_impl_restriction(ImplRestriction);
1113 pub fn walk_label(Label);
1115 pub fn walk_lifetime(Lifetime);
1116 pub fn walk_local(Local);
1117 pub fn walk_mac(MacCall);
1118 pub fn walk_macro_def(MacroDef);
1119 pub fn walk_mut_restriction(MutRestriction);
1120 pub fn walk_param_bound(GenericBound);
1121 pub fn walk_param(Param);
1122 pub fn walk_pat_field(PatField);
1123 pub fn walk_path(Path);
1124 pub fn walk_path_segment(PathSegment);
1125 pub fn walk_pat(Pat);
1126 pub fn walk_poly_trait_ref(PolyTraitRef);
1127 pub fn walk_precise_capturing_arg(PreciseCapturingArg);
1128 pub fn walk_qself(QSelf);
1129 pub fn walk_trait_ref(TraitRef);
1130 pub fn walk_ty_pat(TyPat);
1131 pub fn walk_ty(Ty);
1132 pub fn walk_use_tree(UseTree);
1133 pub fn walk_variant_data(VariantData);
1134 pub fn walk_variant(Variant);
1135 pub fn walk_vis(Visibility);
1136 pub fn walk_where_predicate_kind(WherePredicateKind);
1137 pub fn walk_where_predicate(WherePredicate);
1138 );
1139 };
1140}
1141
1142#[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(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(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(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::Move(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_impl_restriction<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a ImplRestriction) -> 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_mut_restriction<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a MutRestriction) -> 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_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>);
1143
1144macro_rules! generate_list_visit_fns {
1145 ($($name:ident, $Ty:ty, $visit_fn:ident$(, $param:ident: $ParamTy:ty)*;)+) => {
1146 $(
1147 #[allow(unused_parens)]
1148 impl<'a, V: Visitor<'a>> Visitable<'a, V> for ThinVec<$Ty> {
1149 type Extra = ($($ParamTy),*);
1150
1151 #[inline]
1152 fn visit(
1153 &'a self,
1154 visitor: &mut V,
1155 ($($param),*): Self::Extra,
1156 ) -> V::Result {
1157 $name(visitor, self $(, $param)*)
1158 }
1159 }
1160
1161 fn $name<'a, V: Visitor<'a>>(
1162 vis: &mut V,
1163 values: &'a ThinVec<$Ty>,
1164 $(
1165 $param: $ParamTy,
1166 )*
1167 ) -> V::Result {
1168 walk_list!(vis, $visit_fn, values$(,$param)*);
1169 V::Result::output()
1170 }
1171 )+
1172 }
1173}
1174
1175#[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! {
1176 visit_items, Box<Item>, visit_item;
1177 visit_foreign_items, Box<ForeignItem>, visit_foreign_item;
1178 visit_generic_params, GenericParam, visit_generic_param;
1179 visit_stmts, Stmt, visit_stmt;
1180 visit_exprs, Box<Expr>, visit_expr;
1181 visit_expr_fields, ExprField, visit_expr_field;
1182 visit_pat_fields, PatField, visit_pat_field;
1183 visit_variants, Variant, visit_variant;
1184 visit_assoc_items, Box<AssocItem>, visit_assoc_item, ctxt: AssocCtxt;
1185 visit_where_predicates, WherePredicate, visit_where_predicate;
1186 visit_params, Param, visit_param;
1187 visit_field_defs, FieldDef, visit_field_def;
1188 visit_arms, Arm, visit_arm;
1189}
1190
1191pub fn walk_stmt<'a, V: Visitor<'a>>(visitor: &mut V, statement: &'a Stmt) -> V::Result {
1192 let Stmt { id, kind, span: _ } = statement;
1193 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));
1194 match kind {
1195 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)),
1196 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)),
1197 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)),
1198 StmtKind::Empty => {}
1199 StmtKind::MacCall(mac) => {
1200 let MacCallStmt { mac, attrs, style: _, tokens: _ } = &**mac;
1201 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);
1202 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));
1203 }
1204 }
1205 V::Result::output()
1206}