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