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

Classes

class  Location
 
struct  Position
 

Typedefs

template<typename N >
using Path = std::vector< std::reference_wrapper< N > >
 
template<typename Result = void, typename Dispatcher = detail::visitor::NoDispatcher, typename Erased = Node>
using PreOrder = detail::visitor::Visitor< Result, Dispatcher, Erased, detail::visitor::Order::Pre >
 
template<typename Result = void, typename Dispatcher = detail::visitor::NoDispatcher, typename Erased = Node>
using PostOrder = detail::visitor::Visitor< Result, Dispatcher, Erased, detail::visitor::Order::Post >
 

Functions

template<typename N >
N & current (const Path< N > &path)
 
const Nodeparent (const Path< const Node > &path, int parent_nr=1)
 
Nodeparent (const Path< Node > &path, int parent_nr=1)
 
template<typename T , IF_NOT_SAME(T, Node) >
std::optional< const T > findParent (const Path< Node > &path)
 
template<typename T , IF_NOT_SAME(T, Node) >
std::optional< const T > findParent (const Path< const Node > &path)
 

Detailed Description

Visitor performing a pre-order iteration over an AST.

Typedef Documentation

◆ Path

template<typename N >
using hilti::visitor::Path = typedef std::vector<std::reference_wrapper<N> >

Represents a path inside an AST from the root node to a node reached during iteration.

◆ PostOrder

template<typename Result = void, typename Dispatcher = detail::visitor::NoDispatcher, typename Erased = Node>
using hilti::visitor::PostOrder = typedef detail::visitor::Visitor<Result, Dispatcher, Erased, detail::visitor::Order::Post>

Visitor performing a post-order iteration over an AST.

Function Documentation

◆ current()

template<typename N >
N& hilti::visitor::current ( const Path< N > &  path)

Given an AST path, returns the current node.

◆ findParent() [1/2]

template<typename T , IF_NOT_SAME(T, Node) >
std::optional<const T> hilti::visitor::findParent ( const Path< Node > &  path)

Given an AST path, return the first parent of the current node that has a given type.

◆ findParent() [2/2]

template<typename T , IF_NOT_SAME(T, Node) >
std::optional<const T> hilti::visitor::findParent ( const Path< const Node > &  path)

Given an AST path, return the first parent of the current node that has a given type.

◆ parent() [1/2]

const Node& hilti::visitor::parent ( const Path< const Node > &  path,
int  parent_nr = 1 
)
inline

Given an AST path, returns a parent to the current node.

Parameters
pathAST path
parent_nrnumber of the parent to return; 1 returns immediate parent, 2 the 2nd, etc.
Exceptions
<tt>std::out_of_range</tt>if the requested parent does not exist

◆ parent() [2/2]

Node& hilti::visitor::parent ( const Path< Node > &  path,
int  parent_nr = 1 
)
inline

Given an AST path, returns a parent to the current node.

Parameters
pathAST path
parent_nrnumber of the parent to return; 1 returns immediate parent, 2 the 2nd, etc.
Exceptions
<tt>std::out_of_range</tt>if the requested parent does not exist