pub trait AstVisitable: Any {
// Required methods
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>;
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>;
// Provided methods
fn name(&self) -> &'static str { ... }
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T)) { ... }
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T)) { ... }
}Expand description
An overrideable visitor trait that can be used to conveniently traverse the whole contents of an item. This is useful when e.g. dealing with types, which show up pretty much everywhere in the ast.
This defines three traits:
AstVisitableis a trait implemented by all the types listed below; it has adrive[_mut]method that takes aVisitAst[Mut]visitor and calls its methods on all the relevant subvalues ofselfencountered.VisitAst[Mut]is a (pair of) visitor trait(s) that can be implemented by visitors. To define a visitor, implementVisitAst[Mut]and override the methods you need.
This trait has a drive[_mut] method that knows how to drive a VisitAst[Mut] visitor. This
trait is implemented for all the listed types. If listed as override, the corresponding
visitor trait has an overrideable method to visit this type. If listed as drive, the type
will only be visited by recursing into its contents.
Morally this represents the predicate for<V: VisitAst[Mut]> Self: Drive[Mut]<AstVisitableWrapper<V>>
Required Methods§
Sourcefn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any
method if it exists, otherwise visit_inner.
Sourcefn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any
method if it exists, otherwise visit_inner.
Provided Methods§
Sourcefn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
Visit all occurrences of that type inside self, in pre-order traversal.
Sourcefn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
Visit all occurrences of that type inside self, in pre-order traversal.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl AstVisitable for ()
impl AstVisitable for ()
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Source§impl<A: AstVisitable, B: AstVisitable> AstVisitable for Result<A, B>
impl<A: AstVisitable, B: AstVisitable> AstVisitable for Result<A, B>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Source§impl<A: AstVisitable, B: AstVisitable> AstVisitable for (A, B)
impl<A: AstVisitable, B: AstVisitable> AstVisitable for (A, B)
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Source§impl<A: AstVisitable, B: AstVisitable, C: AstVisitable> AstVisitable for (A, B, C)
impl<A: AstVisitable, B: AstVisitable, C: AstVisitable> AstVisitable for (A, B, C)
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Source§impl<K: Any, T: AstVisitable> AstVisitable for HashMap<K, T>
Manual impl that only visits the values
impl<K: Any, T: AstVisitable> AstVisitable for HashMap<K, T>
Manual impl that only visits the values
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Source§impl<T: AstVisitable> AstVisitable for Option<T>
impl<T: AstVisitable> AstVisitable for Option<T>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Source§impl<T: AstVisitable> AstVisitable for Box<T>
impl<T: AstVisitable> AstVisitable for Box<T>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Source§impl<T: AstVisitable> AstVisitable for Vec<T>
impl<T: AstVisitable> AstVisitable for Vec<T>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Implementors§
impl AstVisitable for AggregateKind
impl AstVisitable for BinOp
impl AstVisitable for BorrowKind
impl AstVisitable for BuiltinFunId
impl AstVisitable for CastKind
impl AstVisitable for ConstantExprKind
impl AstVisitable for FieldProjKind
impl AstVisitable for FnPtrKind
impl AstVisitable for FunId
impl AstVisitable for NullOp
impl AstVisitable for Operand
impl AstVisitable for PlaceKind
impl AstVisitable for ProjectionElem
impl AstVisitable for Rvalue
impl AstVisitable for UnOp
impl AstVisitable for UnsizingMetadata
impl AstVisitable for AbortKind
impl AstVisitable for Body
impl AstVisitable for FnOperand
impl AstVisitable for ItemSource
impl AstVisitable for VTableField
impl AstVisitable for ItemByVal
impl AstVisitable for ItemId
impl AstVisitable for charon_lib::ast::llbc_ast::StatementKind
impl AstVisitable for Switch
impl AstVisitable for ImplElem
impl AstVisitable for PathElem
impl AstVisitable for BuiltinTy
impl AstVisitable for ClosureKind
impl AstVisitable for ConstGeneric
impl AstVisitable for FloatTy
impl AstVisitable for IntTy
impl AstVisitable for IntegerTy
impl AstVisitable for LiteralTy
impl AstVisitable for PtrMetadata
impl AstVisitable for RefKind
impl AstVisitable for Region
impl AstVisitable for TraitRefKind
impl AstVisitable for TyKind
impl AstVisitable for TypeDeclKind
impl AstVisitable for TypeId
impl AstVisitable for UIntTy
impl AstVisitable for charon_lib::ast::ullbc_ast::StatementKind
impl AstVisitable for SwitchTargets
impl AstVisitable for TerminatorKind
impl AstVisitable for Literal
impl AstVisitable for ScalarValue
impl AstVisitable for BuiltinIndexOp
impl AstVisitable for ConstantExpr
impl AstVisitable for FnPtr
impl AstVisitable for Place
impl AstVisitable for TraitMethodRef
impl AstVisitable for Assert
impl AstVisitable for Call
impl AstVisitable for CopyNonOverlapping
impl AstVisitable for FunDecl
impl AstVisitable for FunDeclRef
impl AstVisitable for GlobalDecl
impl AstVisitable for GlobalDeclRef
impl AstVisitable for Local
impl AstVisitable for Locals
impl AstVisitable for TraitAssocConst
impl AstVisitable for TraitAssocTy
impl AstVisitable for TraitAssocTyImpl
impl AstVisitable for TraitDecl
impl AstVisitable for TraitImpl
impl AstVisitable for TraitItemName
impl AstVisitable for TraitMethod
impl AstVisitable for FunDeclId
impl AstVisitable for GlobalDeclId
impl AstVisitable for TraitDeclId
impl AstVisitable for TraitImplId
impl AstVisitable for TranslatedCrate
impl AstVisitable for TypeDeclId
impl AstVisitable for Block
impl AstVisitable for charon_lib::ast::llbc_ast::Statement
impl AstVisitable for StatementId
impl AstVisitable for ItemMeta
impl AstVisitable for Span
impl AstVisitable for Disambiguator
impl AstVisitable for Name
impl AstVisitable for ClosureInfo
impl AstVisitable for ConstGenericParam
impl AstVisitable for ConstGenericVarId
impl AstVisitable for DeBruijnId
impl AstVisitable for DynPredicate
impl AstVisitable for Field
impl AstVisitable for FieldId
impl AstVisitable for FunSig
impl AstVisitable for GenericArgs
impl AstVisitable for GenericParams
impl AstVisitable for Layout
impl AstVisitable for RegionId
impl AstVisitable for RegionParam
impl AstVisitable for TraitClauseId
impl AstVisitable for TraitDeclRef
impl AstVisitable for TraitImplRef
impl AstVisitable for TraitParam
impl AstVisitable for TraitRef
impl AstVisitable for TraitRefContents
impl AstVisitable for TraitTypeConstraint
impl AstVisitable for Ty
impl AstVisitable for TypeDecl
impl AstVisitable for TypeDeclRef
impl AstVisitable for TypeParam
impl AstVisitable for TypeVarId
impl AstVisitable for Variant
impl AstVisitable for VariantId
impl AstVisitable for VariantLayout
impl AstVisitable for BlockData
impl AstVisitable for BlockId
impl AstVisitable for charon_lib::ast::ullbc_ast::Statement
impl AstVisitable for Terminator
impl AstVisitable for FloatValue
impl AstVisitable for LocalId
impl AstVisitable for charon_lib::ast::llbc_ast::ExprBody
impl AstVisitable for charon_lib::ast::ullbc_ast::ExprBody
impl<A: AstVisitable, B: AstVisitable> AstVisitable for OutlivesPred<A, B>
impl<I: Idx, T: AstVisitable> AstVisitable for IndexMap<I, T>
impl<I: Idx, T: AstVisitable> AstVisitable for IndexVec<I, T>
impl<Id: AstVisitable> AstVisitable for DeclRef<Id>
impl<K: Any, T: AstVisitable> AstVisitable for SeqHashMap<K, T>
Manual impl that only visits the values