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) {
match *self {
AssocCtxt::Trait => 0u8.stable_hash(__hcx, __hasher),
AssocCtxt::Impl { of_trait: ref __binding_0 } =>
1u8.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_struct_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_test_binder_item(TestBinderItem) => walk_test_binder_item;
367 visit_trait_ref(TraitRef) => walk_trait_ref;
368 visit_ty(Ty) => walk_ty;
369 visit_ty_pat(TyPat) => walk_ty_pat;
370 visit_use_tree(UseTree) => walk_use_tree;
371 visit_use_tree_and_id(UseTreeAndId) => walk_use_tree_and_id;
372 visit_variant(Variant) => walk_variant;
373 visit_variant_data(VariantData) => walk_variant_data;
374 visit_vis(Visibility) => walk_vis;
375 visit_where_predicate(WherePredicate) => walk_where_predicate;
376 visit_where_predicate_kind(WherePredicateKind) => walk_where_predicate_kind;
377 }
379 };
380}
381pub(crate) use for_each_ast_visit_hook;
382
383macro_rules! common_visitor_and_walkers {
384 ($(($mut:ident))? $Visitor:ident$(<$lt:lifetime>)?) => {
385 $(${ignore($lt)}
386 #[derive(Copy, Clone)]
387 )?
388 #[derive(Debug)]
389 pub enum FnKind<'a> {
390 Fn(FnCtxt, &'a $($mut)? Visibility, &'a $($mut)? Fn),
392
393 Closure(
395 &'a $($mut)? ClosureBinder,
396 &'a $($mut)? Option<CoroutineMarker>,
397 &'a $($mut)? Box<FnDecl>,
398 &'a $($mut)? Box<Expr>,
399 ),
400 }
401
402 impl<'a> FnKind<'_> {
403 pub fn header(&'a $($mut)? self) -> Option<&'a $($mut)? FnHeader> {
404 match *self {
405 FnKind::Fn(_, _, Fn { sig, .. }) => Some(&$($mut)? sig.header),
406 FnKind::Closure(..) => None,
407 }
408 }
409
410 pub fn ident(&'a $($mut)? self) -> Option<&'a $($mut)? Ident> {
411 match self {
412 FnKind::Fn(_, _, Fn { ident, .. }) => Some(ident),
413 _ => None,
414 }
415 }
416
417 pub fn decl(&'a $($mut)? self) -> &'a $($mut)? FnDecl {
418 match self {
419 FnKind::Fn(_, _, Fn { sig, .. }) => &$($mut)? sig.decl,
420 FnKind::Closure(_, _, decl, _) => decl,
421 }
422 }
423
424 pub fn ctxt(&self) -> Option<FnCtxt> {
425 match self {
426 FnKind::Fn(ctxt, ..) => Some(*ctxt),
427 FnKind::Closure(..) => None,
428 }
429 }
430 }
431
432 impl_visitable_noop! {
434 AttrId,
436 GeneratedAttr,
437 Movability,
438 Mutability,
439 Pinnedness,
440 Result<(), rustc_span::ErrorGuaranteed>,
441 Symbol,
442 SyntheticAttr,
443 bool,
444 char,
445 crate::token::CommentKind,
446 crate::token::Delimiter,
447 crate::token::Lit,
448 crate::token::LitKind,
449 crate::tokenstream::LazyTokenStream,
450 crate::tokenstream::TokenStream,
451 rustc_data_structures::fx::FxHashMap<Symbol, usize>,
452 rustc_span::ByteSymbol,
453 rustc_span::ErrorGuaranteed,
454 std::borrow::Cow<'_, str>,
455 u8,
456 usize,
457 }
459 $(${ignore($lt)} impl_visitable_noop! { Span, })?
461
462 impl_visitable_list! {
466 ThinVec<(Ident, Option<Ident>)>,
468 ThinVec<(NodeId, Path)>,
469 ThinVec<AngleBracketedArg>,
470 ThinVec<Attribute>,
471 ThinVec<Box<Ty>>,
472 ThinVec<EiiImpl>,
473 ThinVec<GenericBound>,
474 ThinVec<Ident>,
475 ThinVec<Pat>,
476 ThinVec<PathSegment>,
477 ThinVec<PreciseCapturingArg>,
478 ThinVec<TestBinderConstraint>,
479 ThinVec<TestBinderExists>,
480 ThinVec<TestBinderForall>,
481 ThinVec<TyPat>,
482 ThinVec<UseTreeAndId>,
483 }
485
486 impl_visitable_direct! {
490 AngleBracketedArg,
492 AngleBracketedArgs,
493 AsmMacro,
494 AssignOpKind,
495 AssocItemConstraintKind,
496 AttrArgs,
497 AttrItem,
498 AttrKind,
499 AttrStyle,
500 BinOpKind,
501 BindingMode,
502 BlockCheckMode,
503 BorrowKind,
504 BoundAsyncness,
505 BoundConstness,
506 BoundPolarity,
507 ByRef,
508 Closure,
509 Const,
510 ConstBlockItem,
511 ConstItem,
512 CoroutineKind,
513 Defaultness,
514 Delegation,
515 DelegationMac,
516 DelegationSuffixes,
517 DelimArgs,
518 DelimSpan,
519 EiiDecl,
520 EiiImpl,
521 EnumDef,
522 Extern,
523 FnPtrTy,
524 ForLoopKind,
525 FormatArgPosition,
526 FormatArgsPiece,
527 FormatArgument,
528 FormatArgumentKind,
529 FormatArguments,
530 FormatPlaceholder,
531 GenericParamKind,
532 Guard,
533 Impl,
534 ImplPolarity,
535 Inline,
536 InlineAsmOperand,
537 InlineAsmRegOrRegClass,
538 InlineAsmTemplatePiece,
539 IsAuto,
540 LocalKind,
541 MacCallStmt,
542 MacStmtStyle,
543 MatchKind,
544 MethodCall,
545 ModKind,
546 ModSpans,
547 NormalAttr,
548 Parens,
549 ParenthesizedArgs,
550 PatFieldsRest,
551 PatKind,
552 RangeEnd,
553 RangeLimits,
554 RangeSyntax,
555 Recovered,
556 RestrictionKind,
557 Safety,
558 StaticItem,
559 StrLit,
560 StrStyle,
561 StructExpr,
562 StructRest,
563 Term,
564 TestBinderRegionEquality,
565 Trait,
566 TraitBoundModifiers,
567 TraitObjectSyntax,
568 TyAlias,
569 TyKind,
570 TyPatKind,
571 UnOp,
572 UnsafeBinderCastKind,
573 UnsafeBinderTy,
574 UnsafeSource,
575 UseTreeKind,
576 VisibilityKind,
577 WhereBoundPredicate,
578 WhereClause,
579 WhereEqPredicate,
580 WhereRegionPredicate,
581 YieldKind,
582 }
584
585 #[doc = concat!(
589 " e.g., the `visit_item` method by default calls `visit"
590 $(, "_", stringify!($mut))?,
591 "::walk_item`."
592 )]
593 pub trait $Visitor<$($lt)?>: Sized $(${ignore($mut)} + MutVisitorResult<Result = ()>)? {
603 $(
604 ${ignore($lt)}
605 type Result: VisitorResult = ();
608 )?
609
610 fn visit_ident(&mut self, Ident { name: _, span }: &$($lt)? $($mut)? Ident)
638 -> Self::Result
639 {
640 visit_visitable!(self, span);
641 Self::Result::output()
642 }
643
644 crate::visit::for_each_ast_visit_hook! { fn_visit! }
645
646 fn visit_id(&mut self, _id: $(&$mut)? NodeId) -> Self::Result {
648 Self::Result::output()
649 }
650
651 fn visit_method_receiver_expr(&mut self, ex: &$($lt)? $($mut)? Expr) -> Self::Result {
654 self.visit_expr(ex)
655 }
656
657 fn visit_item(&mut self, item: &$($lt)? $($mut)? Item) -> Self::Result {
658 walk_item(self, item)
659 }
660
661 fn visit_foreign_item(&mut self, item: &$($lt)? $($mut)? ForeignItem) -> Self::Result {
662 walk_item(self, item)
663 }
664
665 fn visit_assoc_item(&mut self, item: &$($lt)? $($mut)? AssocItem, ctxt: AssocCtxt)
666 -> Self::Result
667 {
668 walk_assoc_item(self, item, ctxt)
669 }
670
671 fn visit_fn(
673 &mut self,
674 fk: FnKind<$($lt)? $(${ignore($mut)} '_)?>,
675 _: &AttrVec,
676 _: Span,
677 _: NodeId,
678 ) -> Self::Result {
679 walk_fn(self, fk)
680 }
681
682 $(
684 fn visit_stmt(&mut self, s: &$lt Stmt) -> Self::Result {
685 walk_stmt(self, s)
686 }
687 )?
688
689 $(
691 #[inline]
694 fn visit_span(&mut self, _sp: &$mut Span) {
695 }
697
698 fn flat_map_foreign_item(&mut self, ni: Box<ForeignItem>)
699 -> SmallVec<[Box<ForeignItem>; 1]>
700 {
701 walk_flat_map_foreign_item(self, ni)
702 }
703
704 fn flat_map_item(&mut self, i: Box<Item>) -> SmallVec<[Box<Item>; 1]> {
705 walk_flat_map_item(self, i)
706 }
707
708 fn flat_map_field_def(&mut self, fd: FieldDef) -> SmallVec<[FieldDef; 1]> {
709 walk_flat_map_field_def(self, fd)
710 }
711
712 fn flat_map_assoc_item(
713 &mut self,
714 i: Box<AssocItem>,
715 ctxt: AssocCtxt,
716 ) -> SmallVec<[Box<AssocItem>; 1]> {
717 walk_flat_map_assoc_item(self, i, ctxt)
718 }
719
720 fn flat_map_stmt(&mut self, s: Stmt) -> SmallVec<[Stmt; 1]> {
721 walk_flat_map_stmt(self, s)
722 }
723
724 fn flat_map_arm(&mut self, arm: Arm) -> SmallVec<[Arm; 1]> {
725 walk_flat_map_arm(self, arm)
726 }
727
728 fn filter_map_expr(&mut self, e: Box<Expr>) -> Option<Box<Expr>> {
729 walk_filter_map_expr(self, e)
730 }
731
732 fn flat_map_variant(&mut self, v: Variant) -> SmallVec<[Variant; 1]> {
733 walk_flat_map_variant(self, v)
734 }
735
736 fn flat_map_param(&mut self, param: Param) -> SmallVec<[Param; 1]> {
737 walk_flat_map_param(self, param)
738 }
739
740 fn flat_map_generic_param(&mut self, param: GenericParam)
741 -> SmallVec<[GenericParam; 1]>
742 {
743 walk_flat_map_generic_param(self, param)
744 }
745
746 fn flat_map_expr_field(&mut self, f: ExprField) -> SmallVec<[ExprField; 1]> {
747 walk_flat_map_expr_field(self, f)
748 }
749
750 fn flat_map_where_predicate(
751 &mut self,
752 where_predicate: WherePredicate,
753 ) -> SmallVec<[WherePredicate; 1]> {
754 walk_flat_map_where_predicate(self, where_predicate)
755 }
756
757 fn flat_map_pat_field(&mut self, fp: PatField) -> SmallVec<[PatField; 1]> {
758 walk_flat_map_pat_field(self, fp)
759 }
760 )?
761 }
762
763 crate::visit::for_each_ast_visit_hook! { impl_visitable_visit! }
764
765 impl_visitable!(|&$($lt)? $($mut)? self: Ident, visitor: &mut V| {
766 visitor.visit_ident(self)
767 });
768
769 $(
770 impl_visitable!(
771 |&$lt self: NodeId, visitor: &mut V| {
772 visitor.visit_id(*self)
773 }
774 );
775 )?
776 $(
777 impl_visitable!(
778 |&$mut self: NodeId, visitor: &mut V| {
779 visitor.visit_id(self)
780 }
781 );
782
783 impl_visitable!(|&mut self: Span, visitor: &mut V| {
784 visitor.visit_span(self)
785 });
786 )?
787
788 impl_visitable!(|&$($lt)? $($mut)? self: Item, vis: &mut V| {
789 vis.visit_item(self)
790 });
791 impl_visitable!(|&$($lt)? $($mut)? self: ForeignItem, vis: &mut V| {
792 vis.visit_foreign_item(self)
793 });
794 impl_visitable!(|&$($lt)? $($mut)? self: AssocItem, vis: &mut V, ctxt: AssocCtxt| {
795 vis.visit_assoc_item(self, ctxt)
796 });
797
798 pub trait WalkItemKind {
799 type Ctxt;
800 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
801 &$($lt)? $($mut)? self,
802 attrs: &AttrVec,
803 span: Span,
804 id: NodeId,
805 visibility: &$($lt)? $($mut)? Visibility,
806 ctxt: Self::Ctxt,
807 vis: &mut V,
808 ) -> V::Result;
809 }
810
811 fn walk_item_inner<$($lt,)? K: WalkItemKind, V: $Visitor$(<$lt>)?>(
812 visitor: &mut V,
813 item: &$($lt)? $($mut)? Item<K>,
814 ctxt: K::Ctxt,
815 ) -> V::Result {
816 let Item { attrs, id, kind, vis, span, tokens: _ } = item;
817 visit_visitable!(visitor, id, attrs, vis);
818 try_visit!(kind.walk(attrs, *span, *id, vis, ctxt, visitor));
819 visit_visitable!(visitor, span);
820 V::Result::output()
821 }
822
823 pub fn walk_item<$($lt,)? K: WalkItemKind<Ctxt = ()>, V: $Visitor$(<$lt>)?>(
825 visitor: &mut V,
826 item: &$($lt)? $($mut)? Item<K>,
827 ) -> V::Result {
828 walk_item_inner(visitor, item, ())
829 }
830
831 pub fn walk_assoc_item<$($lt,)? K: WalkItemKind<Ctxt = AssocCtxt>, V: $Visitor$(<$lt>)?>(
833 visitor: &mut V,
834 item: &$($lt)? $($mut)? Item<K>,
835 ctxt: AssocCtxt,
836 ) -> V::Result {
837 walk_item_inner(visitor, item, ctxt)
838 }
839
840 impl WalkItemKind for ItemKind {
841 type Ctxt = ();
842 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
843 &$($lt)? $($mut)? self,
844 attrs: &AttrVec,
845 span: Span,
846 id: NodeId,
847 visibility: &$($lt)? $($mut)? Visibility,
848 _ctxt: Self::Ctxt,
849 vis: &mut V,
850 ) -> V::Result {
851 match self {
852 ItemKind::Fn(func) => {
853 let kind = FnKind::Fn(FnCtxt::Free, visibility, &$($mut)? *func);
854 try_visit!(vis.visit_fn(kind, attrs, span, id));
855 }
856 ItemKind::ExternCrate(orig_name, ident) =>
857 visit_visitable!(vis, orig_name, ident),
858 ItemKind::Use(use_tree) =>
859 visit_visitable!(vis, use_tree),
860 ItemKind::Static(item) =>
861 visit_visitable!(vis, item),
862 ItemKind::ConstBlock(item) =>
863 visit_visitable!(vis, item),
864 ItemKind::Const(item) =>
865 visit_visitable!(vis, item),
866 ItemKind::Mod(safety, ident, mod_kind) =>
867 visit_visitable!(vis, safety, ident, mod_kind),
868 ItemKind::ForeignMod(nm) =>
869 visit_visitable!(vis, nm),
870 ItemKind::GlobalAsm(asm) =>
871 visit_visitable!(vis, asm),
872 ItemKind::TyAlias(ty_alias) =>
873 visit_visitable!(vis, ty_alias),
874 ItemKind::Enum(ident, generics, enum_definition) =>
875 visit_visitable!(vis, ident, generics, enum_definition),
876 ItemKind::Struct(ident, generics, variant_data)
877 | ItemKind::Union(ident, generics, variant_data) =>
878 visit_visitable!(vis, ident, generics, variant_data),
879 ItemKind::Impl(impl_) =>
880 visit_visitable!(vis, impl_),
881 ItemKind::Trait(trait_) =>
882 visit_visitable!(vis, trait_),
883 ItemKind::TraitAlias(TraitAlias { constness, ident, generics, bounds }) => {
884 visit_visitable!(vis, constness, ident, generics);
885 visit_visitable_with!(vis, bounds, BoundKind::Bound)
886 }
887 ItemKind::MacCall(m) =>
888 visit_visitable!(vis, m),
889 ItemKind::MacroDef(ident, def) =>
890 visit_visitable!(vis, ident, def),
891 ItemKind::Delegation(delegation) =>
892 visit_visitable!(vis, delegation),
893 ItemKind::DelegationMac(dm) =>
894 visit_visitable!(vis, dm),
895 ItemKind::TestBinderConstraints(item) =>
896 visit_visitable!(vis, item),
897 }
898 V::Result::output()
899 }
900 }
901
902 impl WalkItemKind for AssocItemKind {
903 type Ctxt = AssocCtxt;
904 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
905 &$($lt)? $($mut)? self,
906 attrs: &AttrVec,
907 span: Span,
908 id: NodeId,
909 visibility: &$($lt)? $($mut)? Visibility,
910 ctxt: Self::Ctxt,
911 vis: &mut V,
912 ) -> V::Result {
913 match self {
914 AssocItemKind::Const(item) =>
915 visit_visitable!(vis, item),
916 AssocItemKind::Fn(func) => {
917 let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), visibility, &$($mut)? *func);
918 try_visit!(vis.visit_fn(kind, attrs, span, id))
919 }
920 AssocItemKind::Type(alias) =>
921 visit_visitable!(vis, alias),
922 AssocItemKind::MacCall(mac) =>
923 visit_visitable!(vis, mac),
924 AssocItemKind::Delegation(delegation) =>
925 visit_visitable!(vis, delegation),
926 AssocItemKind::DelegationMac(dm) =>
927 visit_visitable!(vis, dm),
928 }
929 V::Result::output()
930 }
931 }
932
933 impl WalkItemKind for ForeignItemKind {
934 type Ctxt = ();
935 fn walk<$($lt,)? V: $Visitor$(<$lt>)?>(
936 &$($lt)? $($mut)? self,
937 attrs: &AttrVec,
938 span: Span,
939 id: NodeId,
940 visibility: &$($lt)? $($mut)? Visibility,
941 _ctxt: Self::Ctxt,
942 vis: &mut V,
943 ) -> V::Result {
944 match self {
945 ForeignItemKind::Static(item) =>
946 visit_visitable!(vis, item),
947 ForeignItemKind::Fn(func) => {
948 let kind = FnKind::Fn(FnCtxt::Foreign, visibility, &$($mut)? *func);
949 try_visit!(vis.visit_fn(kind, attrs, span, id))
950 }
951 ForeignItemKind::TyAlias(alias) =>
952 visit_visitable!(vis, alias),
953 ForeignItemKind::MacCall(mac) =>
954 visit_visitable!(vis, mac),
955 }
956 V::Result::output()
957 }
958 }
959
960 pub fn walk_fn<$($lt,)? V: $Visitor$(<$lt>)?>(
961 vis: &mut V,
962 kind: FnKind<$($lt)? $(${ignore($mut)} '_)?>,
963 ) -> V::Result {
964 match kind {
965 FnKind::Fn(
966 _ctxt,
967 _vis,
969 Fn {
970 defaultness,
971 ident,
972 sig,
973 generics,
974 contract,
975 body,
976 define_opaque,
977 eii_impl,
978 },
979 ) => {
980 let FnSig { header, decl, span } = sig;
981 visit_visitable!(vis,
982 defaultness, ident, header, generics, decl,
983 contract, body, span, define_opaque, eii_impl
984 );
985 }
986 FnKind::Closure(binder, coroutine_marker, decl, body) =>
987 visit_visitable!(vis, binder, coroutine_marker, decl, body),
988 }
989 V::Result::output()
990 }
991
992 impl_walkable!(|&$($lt)? $($mut)? self: Impl, vis: &mut V| {
993 let Impl { generics, of_trait, self_ty, items, constness: _ } = self;
994 try_visit!(vis.visit_generics(generics));
995 if let Some(of_trait) = of_trait {
996 let TraitImplHeader { defaultness, safety, polarity, trait_ref } = of_trait;
997 visit_visitable!(vis, defaultness, safety, polarity, trait_ref);
998 }
999 try_visit!(vis.visit_ty(self_ty));
1000 visit_visitable_with!(vis, items, AssocCtxt::Impl { of_trait: of_trait.is_some() });
1001 V::Result::output()
1002 });
1003
1004 impl_walkable!(|&$($lt)? $($mut)? self: MethodCall, vis: &mut V| {
1006 let MethodCall { seg, receiver, args, span } = self;
1007 try_visit!(vis.visit_method_receiver_expr(receiver));
1008 visit_visitable!(vis, seg, args, span);
1009 V::Result::output()
1010 });
1011
1012 impl_walkable!(|&$($lt)? $($mut)? self: Expr, vis: &mut V| {
1013 let Expr { id, kind, span, attrs, tokens: _ } = self;
1014 visit_visitable!(vis, id, attrs);
1015 match kind {
1016 ExprKind::Array(exprs) =>
1017 visit_visitable!(vis, exprs),
1018 ExprKind::ConstBlock(anon_const) =>
1019 visit_visitable!(vis, anon_const),
1020 ExprKind::Repeat(element, count) =>
1021 visit_visitable!(vis, element, count),
1022 ExprKind::Struct(se) =>
1023 visit_visitable!(vis, se),
1024 ExprKind::Tup(exprs) =>
1025 visit_visitable!(vis, exprs),
1026 ExprKind::Call(callee_expression, arguments) =>
1027 visit_visitable!(vis, callee_expression, arguments),
1028 ExprKind::MethodCall(mc) =>
1029 visit_visitable!(vis, mc),
1030 ExprKind::Binary(op, lhs, rhs) =>
1031 visit_visitable!(vis, op, lhs, rhs),
1032 ExprKind::AddrOf(kind, mutbl, subexpression) =>
1033 visit_visitable!(vis, kind, mutbl, subexpression),
1034 ExprKind::Unary(op, subexpression) =>
1035 visit_visitable!(vis, op, subexpression),
1036 ExprKind::Cast(subexpression, typ) | ExprKind::Type(subexpression, typ) =>
1037 visit_visitable!(vis, subexpression, typ),
1038 ExprKind::Let(pat, expr, span, _recovered) =>
1039 visit_visitable!(vis, pat, expr, span),
1040 ExprKind::If(head_expression, if_block, optional_else) =>
1041 visit_visitable!(vis, head_expression, if_block, optional_else),
1042 ExprKind::While(subexpression, block, opt_label) =>
1043 visit_visitable!(vis, subexpression, block, opt_label),
1044 ExprKind::ForLoop(ForLoop { pat, iter, body, label, kind }) =>
1045 visit_visitable!(vis, pat, iter, body, label, kind),
1046 ExprKind::Loop(block, opt_label, span) =>
1047 visit_visitable!(vis, block, opt_label, span),
1048 ExprKind::Match(subexpression, arms, kind) =>
1049 visit_visitable!(vis, subexpression, arms, kind),
1050 ExprKind::Closure(Closure {
1051 binder,
1052 capture_clause,
1053 coroutine_marker,
1054 constness,
1055 movability,
1056 fn_decl,
1057 body,
1058 fn_decl_span,
1059 fn_arg_span,
1060 }) => {
1061 visit_visitable!(vis, constness, movability, capture_clause);
1062 let kind = FnKind::Closure(binder, coroutine_marker, fn_decl, body);
1063 try_visit!(vis.visit_fn(kind, attrs, *span, *id));
1064 visit_visitable!(vis, fn_decl_span, fn_arg_span);
1065 }
1066 ExprKind::Block(block, opt_label) =>
1067 visit_visitable!(vis, block, opt_label),
1068 ExprKind::Gen(capt, body, kind, decl_span) =>
1069 visit_visitable!(vis, capt, body, kind, decl_span),
1070 ExprKind::Await(expr, span)
1071 | ExprKind::Move(expr, span)
1072 | ExprKind::Use(expr, span) =>
1073 visit_visitable!(vis, expr, span),
1074 ExprKind::Assign(lhs, rhs, span) =>
1075 visit_visitable!(vis, lhs, rhs, span),
1076 ExprKind::AssignOp(op, lhs, rhs) =>
1077 visit_visitable!(vis, op, lhs, rhs),
1078 ExprKind::Field(subexpression, ident) =>
1079 visit_visitable!(vis, subexpression, ident),
1080 ExprKind::Index(main_expression, index_expression, span) =>
1081 visit_visitable!(vis, main_expression, index_expression, span),
1082 ExprKind::Range(start, end, limit) =>
1083 visit_visitable!(vis, start, end, limit),
1084 ExprKind::Underscore => {}
1085 ExprKind::Path(maybe_qself, path) =>
1086 visit_visitable!(vis, maybe_qself, path),
1087 ExprKind::Break(opt_label, opt_expr) =>
1088 visit_visitable!(vis, opt_label, opt_expr),
1089 ExprKind::Continue(opt_label) =>
1090 visit_visitable!(vis, opt_label),
1091 ExprKind::Ret(optional_expression) | ExprKind::Yeet(optional_expression) =>
1092 visit_visitable!(vis, optional_expression),
1093 ExprKind::Become(expr) =>
1094 visit_visitable!(vis, expr),
1095 ExprKind::MacCall(mac) =>
1096 visit_visitable!(vis, mac),
1097 ExprKind::Paren(subexpression) =>
1098 visit_visitable!(vis, subexpression),
1099 ExprKind::InlineAsm(asm) =>
1100 visit_visitable!(vis, asm),
1101 ExprKind::FormatArgs(f) =>
1102 visit_visitable!(vis, f),
1103 ExprKind::OffsetOf(container, fields) =>
1104 visit_visitable!(vis, container, fields),
1105 ExprKind::Yield(kind) =>
1106 visit_visitable!(vis, kind),
1107 ExprKind::Try(subexpression) =>
1108 visit_visitable!(vis, subexpression),
1109 ExprKind::TryBlock(body, optional_type) =>
1110 visit_visitable!(vis, body, optional_type),
1111 ExprKind::Lit(token) =>
1112 visit_visitable!(vis, token),
1113 ExprKind::IncludedBytes(bytes) =>
1114 visit_visitable!(vis, bytes),
1115 ExprKind::UnsafeBinderCast(kind, expr, ty) =>
1116 visit_visitable!(vis, kind, expr, ty),
1117 ExprKind::GcaMacro(expr) =>
1118 visit_visitable!(vis, expr),
1119 ExprKind::Err(_guar) => {}
1120 ExprKind::Dummy => {}
1121 }
1122
1123 visit_visitable!(vis, span);
1124 V::Result::output()
1125 });
1126
1127 crate::visit::for_each_ast_visit_hook! { fn_walk! }
1128 };
1129}
1130pub(crate) use common_visitor_and_walkers;
1131
1132pub 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_struct_field3_finish(f, "Fn",
__self_0, __self_1, &__self_2),
Self::Closure(__self_0, __self_1, __self_2, __self_3) =>
::core::fmt::Formatter::debug_struct_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 GeneratedAttr {
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::LazyTokenStream {
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 TestBinderRegionEquality {
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_test_binder_item(&mut self, node: &'a TestBinderItem)
-> 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 TestBinderItem {
type Extra = ();
#[inline]
fn visit(&'a self, visitor: &mut V, _extra: Self::Extra) -> V::Result {
{ visitor.visit_test_binder_item(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_test_binder_item<'a,
V: Visitor<'a>>(visitor: &mut V, node: &'a TestBinderItem) -> 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>);
1133
1134macro_rules! generate_list_visit_fns {
1135 ($($visit_fn:ident, $Ty:ty $(, $extra:ident: $ExtraTy:ty)?;)+) => {
1136 $(impl_visitable!(|&'a self: ThinVec<$Ty>, visitor: &mut V $(, $extra: $ExtraTy)?| {
1137 walk_list!(visitor, $visit_fn, self $(, $extra)?);
1138 V::Result::output()
1139 });)+
1140 }
1141}
1142
1143impl<'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! {
1144 visit_arm, Arm;
1146 visit_assoc_item, Box<AssocItem>, ctxt: AssocCtxt;
1147 visit_expr, Box<Expr>;
1148 visit_expr_field, ExprField;
1149 visit_field_def, FieldDef;
1150 visit_foreign_item, Box<ForeignItem>;
1151 visit_generic_param, GenericParam;
1152 visit_item, Box<Item>;
1153 visit_param, Param;
1154 visit_pat_field, PatField;
1155 visit_stmt, Stmt;
1156 visit_variant, Variant;
1157 visit_where_predicate, WherePredicate;
1158 }
1160
1161pub fn walk_stmt<'a, V: Visitor<'a>>(visitor: &mut V, statement: &'a Stmt) -> V::Result {
1162 let Stmt { id, kind, span: _ } = statement;
1163 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));
1164 match kind {
1165 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)),
1166 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)),
1167 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)),
1168 StmtKind::Empty => {}
1169 StmtKind::MacCall(mac) => {
1170 let MacCallStmt { mac, attrs, style: _, tokens: _ } = &**mac;
1171 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);
1172 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));
1173 }
1174 }
1175 V::Result::output()
1176}