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