Struct regex_syntax::ast::visitor::HeapVisitor
source · struct HeapVisitor<'a> {
stack: Vec<(&'a Ast, Frame<'a>)>,
stack_class: Vec<(ClassInduct<'a>, ClassFrame<'a>)>,
}
Expand description
HeapVisitor visits every item in an Ast
recursively using constant stack
size and a heap size proportional to the size of the Ast
.
Fields§
§stack: Vec<(&'a Ast, Frame<'a>)>
A stack of Ast
nodes. This is roughly analogous to the call stack
used in a typical recursive visitor.
stack_class: Vec<(ClassInduct<'a>, ClassFrame<'a>)>
Similar to the Ast
stack above, but is used only for character
classes. In particular, character classes embed their own mini
recursive syntax.
Implementations§
source§impl<'a> HeapVisitor<'a>
impl<'a> HeapVisitor<'a>
fn new() -> HeapVisitor<'a>
fn visit<V: Visitor>( &mut self, ast: &'a Ast, visitor: V, ) -> Result<V::Output, V::Err>
sourcefn induct<V: Visitor>(
&mut self,
ast: &'a Ast,
visitor: &mut V,
) -> Result<Option<Frame<'a>>, V::Err>
fn induct<V: Visitor>( &mut self, ast: &'a Ast, visitor: &mut V, ) -> Result<Option<Frame<'a>>, V::Err>
Build a stack frame for the given AST if one is needed (which occurs if and only if there are child nodes in the AST). Otherwise, return None.
If this visits a class, then the underlying visitor implementation may return an error which will be passed on here.
sourcefn pop(&self, induct: Frame<'a>) -> Option<Frame<'a>>
fn pop(&self, induct: Frame<'a>) -> Option<Frame<'a>>
Pops the given frame. If the frame has an additional inductive step,
then return it, otherwise return None
.
fn visit_class<V: Visitor>( &mut self, ast: &'a ClassBracketed, visitor: &mut V, ) -> Result<(), V::Err>
sourcefn visit_class_pre<V: Visitor>(
&self,
ast: &ClassInduct<'a>,
visitor: &mut V,
) -> Result<(), V::Err>
fn visit_class_pre<V: Visitor>( &self, ast: &ClassInduct<'a>, visitor: &mut V, ) -> Result<(), V::Err>
Call the appropriate Visitor
methods given an inductive step.
sourcefn visit_class_post<V: Visitor>(
&self,
ast: &ClassInduct<'a>,
visitor: &mut V,
) -> Result<(), V::Err>
fn visit_class_post<V: Visitor>( &self, ast: &ClassInduct<'a>, visitor: &mut V, ) -> Result<(), V::Err>
Call the appropriate Visitor
methods given an inductive step.
sourcefn induct_class(&self, ast: &ClassInduct<'a>) -> Option<ClassFrame<'a>>
fn induct_class(&self, ast: &ClassInduct<'a>) -> Option<ClassFrame<'a>>
Build a stack frame for the given class node if one is needed (which occurs if and only if there are child nodes). Otherwise, return None.
sourcefn pop_class(&self, induct: ClassFrame<'a>) -> Option<ClassFrame<'a>>
fn pop_class(&self, induct: ClassFrame<'a>) -> Option<ClassFrame<'a>>
Pops the given frame. If the frame has an additional inductive step,
then return it, otherwise return None
.