Spicy
Classes | Typedefs | Enumerations | Functions
hilti::visitor Namespace Reference

Classes

class  Dispatcher
 
class  Iterator
 
class  Range
 
class  Visitor
 
class  MutatingVisitorBase
 
class  MutatingVisitor
 

Typedefs

using PreOrder = visitor::Visitor< visitor::Order::Pre, visitor::Dispatcher >
 
using MutatingPreOrder = visitor::MutatingVisitor< visitor::Order::Pre, visitor::Dispatcher, Builder >
 
using RangePreOrder = visitor::Range< visitor::Order::Pre >
 
using PostOrder = visitor::Visitor< visitor::Order::Post, visitor::Dispatcher >
 
using MutatingPostOrder = visitor::MutatingVisitor< visitor::Order::Post, visitor::Dispatcher, Builder >
 
using RangePostOrder = visitor::Range< visitor::Order::Post >
 

Enumerations

enum class  Order { Pre , Post }
 

Functions

template<typename Visitor , typename Node >
auto range (Visitor &&visitor, Node *root, std::string_view limit_to_tag={})
 
template<typename Visitor , typename Node >
auto visit (Visitor &&visitor, Node *root, std::string_view limit_to_tag={})
 
template<typename Visitor , typename Node , typename ResultFunc >
auto visit (Visitor &&visitor, Node *root, std::string_view limit_to_tag, ResultFunc result)
 
template<typename Visitor >
void dispatch (Visitor &&visitor, Node *n)
 
template<typename Visitor , typename ResultFunc >
auto dispatch (Visitor &&visitor, Node *node, ResultFunc result)
 

Detailed Description

Visitor performing a pre-order iteration over a HILTI AST.

Typedef Documentation

◆ MutatingPostOrder

Mutating visitor performing a post-order iteration over a HILTI AST.

◆ MutatingPreOrder

Mutating visitor performing a pre-order iteration over a HILTI AST.

◆ PostOrder

using hilti::visitor::PostOrder = typedef visitor::Visitor<visitor::Order::Post, visitor::Dispatcher>

Visitor performing a post-order iteration over a HILTI AST.

◆ RangePostOrder

using hilti::visitor::RangePostOrder = typedef visitor::Range<visitor::Order::Post>

Iterator range traversing a HILTI AST in post-order.

◆ RangePreOrder

using hilti::visitor::RangePreOrder = typedef visitor::Range<visitor::Order::Pre>

Iterator range traversing an AST in pre-order.

Function Documentation

◆ dispatch() [1/2]

template<typename Visitor >
void hilti::visitor::dispatch ( Visitor &&  visitor,
Node n 
)

Dispatches a visitor for a single node.

◆ dispatch() [2/2]

template<typename Visitor , typename ResultFunc >
auto hilti::visitor::dispatch ( Visitor &&  visitor,
Node node,
ResultFunc  result 
)

Dispatches a visitor for a single node, then runs a callback and returns its result.

◆ range()

template<typename Visitor , typename Node >
auto hilti::visitor::range ( Visitor &&  visitor,
Node root,
std::string_view  limit_to_tag = {} 
)

Return a range that iterates over AST, returning each node successively.

◆ visit() [1/2]

template<typename Visitor , typename Node , typename ResultFunc >
auto hilti::visitor::visit ( Visitor &&  visitor,
Node root,
std::string_view  limit_to_tag,
ResultFunc  result 
)

Walks the AST recursively and calls dispatch for each node, then runs callback and returns its result.

◆ visit() [2/2]

template<typename Visitor , typename Node >
auto hilti::visitor::visit ( Visitor &&  visitor,
Node root,
std::string_view  limit_to_tag = {} 
)

Walks the AST recursively and calls dispatch for each node.