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