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.