OpenVDB: ComputeGenerator Struct Reference

OpenVDB 8.0.0

Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ComputeGenerator Struct Reference

Visitor object which will generate llvm IR for a syntax tree. This provides the majority of the code generation functionality but is incomplete and should be inherited from and extended with ast::Attribute handling (see PointComputeGenerator.h/VolumeComputeGenerator.h for examples). More...

`#include <ComputeGenerator.h>`

Inherits Visitor< ComputeGenerator >.

Inherited by PointComputeGenerator, and VolumeComputeGenerator.

## Public Types
using | NodeType = typename std::conditional< true, const NodeT, NodeT >::type
| Templated conditional which resolves to a const NodeT if ConstVisit is true, or a non-const NodeT if ConstVisit is false. More...

## Public Member Functions
| ComputeGenerator (llvm::Module &module, const FunctionOptions &options, FunctionRegistry &functionRegistry, Logger &logger)
virtual | ~ComputeGenerator ()=default
bool | generate (const ast::Tree &)
SymbolTable & | globals ()
const SymbolTable & | globals () const
bool | postOrderNodes () const
| Code generation always runs post order. More...
bool | traverse (const ast::Block *block)
| Custom traversal of scoped blocks. More...
bool | traverse (const ast::CommaOperator *comma)
| Custom traversal of comma expression. More...
bool | traverse (const ast::ConditionalStatement *cond)
| Custom traversal of conditional statements. More...
bool | traverse (const ast::BinaryOperator *bin)
| Custom traversal of binary operators. More...
bool | traverse (const ast::TernaryOperator *tern)
| Custom traversal of ternary operators. More...
bool | traverse (const ast::Loop *loop)
| Custom traversal of loops. More...
bool | traverse (const ast::DeclareLocal *decl)
| Custom traversal of declarations. More...
virtual bool | visit (const ast::CommaOperator *)
virtual bool | visit (const ast::AssignExpression *)
virtual bool | visit (const ast::Crement *)
virtual bool | visit (const ast::FunctionCall *)
virtual bool | visit (const ast::Attribute *)
virtual bool | visit (const ast::Tree *)
virtual bool | visit (const ast::Block *)
virtual bool | visit (const ast::ConditionalStatement *)
virtual bool | visit (const ast::Loop *)
virtual bool | visit (const ast::Keyword *)
virtual bool | visit (const ast::UnaryOperator *)
virtual bool | visit (const ast::BinaryOperator *)
virtual bool | visit (const ast::TernaryOperator *)
virtual bool | visit (const ast::Cast *)
virtual bool | visit (const ast::DeclareLocal *)
virtual bool | visit (const ast::Local *)
virtual bool | visit (const ast::ExternalVariable *)
virtual bool | visit (const ast::ArrayUnpack *)
virtual bool | visit (const ast::ArrayPack *)
virtual bool | visit (const ast::Value< bool > *)
virtual bool | visit (const ast::Value< int16_t > *)
virtual bool | visit (const ast::Value< int32_t > *)
virtual bool | visit (const ast::Value< int64_t > *)
virtual bool | visit (const ast::Value< float > *)
virtual bool | visit (const ast::Value< double > *)
virtual bool | visit (const ast::Value< std::string > *)
template<typename ValueType >
std::enable_if< std::is_integral< ValueType >::value, bool >::type | visit (const ast::Value< ValueType > *node)
template<typename ValueType >
std::enable_if< std::is_floating_point< ValueType >::value, bool >::type | visit (const ast::Value< ValueType > *node)
ComputeGenerator & | derived ()
| Accesses the derived class by static casting the current object. Assumes use of the Curiously Recursive Template Pattern (CRTP). More...
Options
bool | postOrderNodes () const
| Default behavior option. If true, this results in post-order traversal, where node children are traversed and visited before their parent node. If false, this results in pre-order traversal, where by the current node is visited before the node's children. More...
bool | reverseChildVisits () const
| Default behavior option. Reverses the traversal order of child nodes. If true, child nodes are accessed from last to first index .i.e. Node::children() -> 0. If false, child nodes are accessed from first to last .i.e. 0 -> Node::children() More...
bool | visitNodeHierarchies () const
| Default behavior option. Controls whether nodes visit themselves at each stage of their class hierarchy. If true, nodes perform multiple visits on their potentially abstract base classes. If false, only the concrete derived types are visited. More...
bool | reverseHierarchyVisits () const
| Default behavior option. Reverses the traversal order of node hierarchies. If true, hierarchical visits start at the very top of their inheritance structure (always a Node AST node) and visit downwards until the lowest derived concrete node is reached. If false, hierarchical visits start at the lowest derived concrete node and visit upwards until the very top of their inheritance structure (always a Node AST node) is reached. More...
Traversals
bool | traverse (NodeType< ast::Tree > *tree)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::StatementList > *cond)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Block > *block)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::CommaOperator > *comma)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Loop > *loop)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Keyword > *keyw)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::ConditionalStatement > *cond)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::AssignExpression > *asgn)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Crement > *crmt)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::UnaryOperator > *unry)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::BinaryOperator > *bin)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::TernaryOperator > *tern)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Cast > *cast)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::FunctionCall > *call)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Attribute > *attr)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::ExternalVariable > *ext)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::DeclareLocal > *decl)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Local > *loc)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::ArrayPack > *pack)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::ArrayUnpack > *pack)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Value< bool >> *val)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Value< int16_t >> *val)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Value< int32_t >> *val)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Value< int64_t >> *val)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Value< float >> *val)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Value< double >> *val)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Value< std::string >> *val)
| Default traversals for a given concrete AST node type. More...
bool | traverse (NodeType< ast::Node > *node)
| The default traversal method which is hit for all child traversals. The correct derived traversal scheme is selected by using the node enumerated type. More...
Visits
bool | visit (NodeType< ast::Node > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Statement > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Expression > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Variable > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::ValueBase > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Tree > *)
| Visits for concrete Node types. More...
bool | visit (NodeType< ast::StatementList > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Block > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::CommaOperator > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Loop > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Keyword > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::ConditionalStatement > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::AssignExpression > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Crement > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::UnaryOperator > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::BinaryOperator > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::TernaryOperator > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Cast > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::FunctionCall > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Attribute > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::ExternalVariable > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::DeclareLocal > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Local > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::ArrayPack > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::ArrayUnpack > *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Value< bool >> *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Value< int16_t >> *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Value< int32_t >> *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Value< int64_t >> *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Value< float >> *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Value< double >> *)
| Visits for abstract (pure-virtual) Node types. More...
bool | visit (NodeType< ast::Value< std::string >> *)
| Visits for abstract (pure-virtual) Node types. More...

## Protected Member Functions
const FunctionGroup * | getFunction (const std::string &identifier, const bool allowInternal=false)
bool | binaryExpression (llvm::Value *&result, llvm::Value *lhs, llvm::Value *rhs, const ast::tokens::OperatorToken op, const ast::Node *node)
bool | assignExpression (llvm::Value *lhs, llvm::Value *&rhs, const ast::Node *node)

## Protected Attributes
llvm::Module & | mModule
llvm::LLVMContext & | mContext
llvm::IRBuilder | mBuilder
std::stack< llvm::Value * > | mValues
std::stack< std::pair< llvm::BasicBlock *, llvm::BasicBlock * > > | mBreakContinueStack
size_t | mScopeIndex
SymbolTableBlocks | mSymbolTables
llvm::Function * | mFunction
const FunctionOptions | mOptions
Logger & | mLog

## Detailed Description

Visitor object which will generate llvm IR for a syntax tree. This provides the majority of the code generation functionality but is incomplete and should be inherited from and extended with ast::Attribute handling (see PointComputeGenerator.h/VolumeComputeGenerator.h for examples).

Note
  : The visit/traverse methods work slightly differently to the normal Visitor to allow proper handling of errors and visitation history. Nodes that inherit from ast::Expression can return false from visit() (and so traverse()), but this will not necessarily stop traversal altogether. Instead, any ast::Statements that are not also ast::Expressions i.e. Block, ConditionalStatement, Loop, DeclareLocal override their visit/traverse methods to handle custom traversal order, and the catching of failed child Expression visit/traverse calls. This allows errors in independent Statements to not halt traversal for future Statements and so allow capturing of multiple errors in an ast::Tree in a single call to generate().

## Member Typedef Documentation

## ◆ NodeType

using NodeType = typename std::conditional<true , const NodeT, NodeT>::type
| inherited

Templated conditional which resolves to a const NodeT if ConstVisit is true, or a non-const NodeT if ConstVisit is false.

## Constructor & Destructor Documentation

## ◆ ComputeGenerator()

ComputeGenerator | ( | llvm::Module & | module,
|  | const FunctionOptions & | options,
|  | FunctionRegistry & | functionRegistry,
|  | Logger & | logger
| ) |  |

## ◆ ~ComputeGenerator()

virtual ~ComputeGenerator | ( |  | ) |
| virtualdefault

## Member Function Documentation

## ◆ assignExpression()

bool assignExpression | ( | llvm::Value * | lhs,
|  | llvm::Value *& | rhs,
|  | const ast::Node * | node
| ) |  |
| protected

## ◆ binaryExpression()

bool binaryExpression | ( | llvm::Value *& | result,
|  | llvm::Value * | lhs,
|  | llvm::Value * | rhs,
|  | const ast::tokens::OperatorToken | op,
|  | const ast::Node * | node
| ) |  |
| protected

## ◆ derived()

ComputeGenerator & derived
| inlineinherited

Accesses the derived class by static casting the current object. Assumes use of the Curiously Recursive Template Pattern (CRTP).

## ◆ generate()

bool generate | ( | const ast::Tree & |  | ) |

## ◆ getFunction()

const FunctionGroup* getFunction | ( | const std::string & | identifier,
|  | const bool | allowInternal = `false`
| ) |  |
| protected

## ◆ globals() [1/2]

SymbolTable& globals | ( |  | ) |
| inline

## ◆ globals() [2/2]

const SymbolTable& globals | ( |  | ) | const
| inline

## ◆ postOrderNodes() [1/2]

bool postOrderNodes
| inlineinherited

Default behavior option. If true, this results in post-order traversal, where node children are traversed and visited before their parent node. If false, this results in pre-order traversal, where by the current node is visited before the node's children.

Post-order traversal (for each node):

1. Traverse all children.
2. Visit the current node. Pre-order traversal (for each node):

1. Visit the current node.
2. Traverse all children.

## ◆ postOrderNodes() [2/2]

bool postOrderNodes | ( |  | ) | const
| inline

Code generation always runs post order.

## ◆ reverseChildVisits()

bool reverseChildVisits
| inlineinherited

Default behavior option. Reverses the traversal order of child nodes. If true, child nodes are accessed from last to first index .i.e. Node::children() -> 0. If false, child nodes are accessed from first to last .i.e. 0 -> Node::children()

## ◆ reverseHierarchyVisits()

bool reverseHierarchyVisits
| inlineinherited

Default behavior option. Reverses the traversal order of node hierarchies. If true, hierarchical visits start at the very top of their inheritance structure (always a Node AST node) and visit downwards until the lowest derived concrete node is reached. If false, hierarchical visits start at the lowest derived concrete node and visit upwards until the very top of their inheritance structure (always a Node AST node) is reached.

Note
  Has no effect if visitNodeHierarchies() is false

## ◆ traverse() [1/35]

bool traverse | ( | const ast::BinaryOperator * | bin | ) |
| inline

Custom traversal of binary operators.

Note
  This overrides the default traversal to handle short-circuiting in logical AND and OR

## ◆ traverse() [2/35]

bool traverse | ( | const ast::Block * | block | ) |
| inline

Custom traversal of scoped blocks.

Note
  This overrides the default traversal to incorporate the scoping of variables declared in this block

## ◆ traverse() [3/35]

bool traverse | ( | const ast::CommaOperator * | comma | ) |
| inline

Custom traversal of comma expression.

Note
  This overrides the default traversal to handle errors without stopping generation of entire list

## ◆ traverse() [4/35]

bool traverse | ( | const ast::ConditionalStatement * | cond | ) |
| inline

Custom traversal of conditional statements.

Note
  This overrides the default traversal to handle branching between different code paths

## ◆ traverse() [5/35]

bool traverse | ( | const ast::DeclareLocal * | decl | ) |
| inline

Custom traversal of declarations.

Note
  This overrides the default traversal to handle traversal of the local and assignment of initialiser, if it exists

## ◆ traverse() [6/35]

bool traverse | ( | const ast::Loop * | loop | ) |
| inline

Custom traversal of loops.

Note
  This overrides the default traversal to handle branching between different code paths and the scoping of variables in for-loop initialisation

## ◆ traverse() [7/35]

bool traverse | ( | const ast::TernaryOperator * | tern | ) |
| inline

Custom traversal of ternary operators.

Note
  This overrides the default traversal to handle branching between different code paths

## ◆ traverse() [8/35]

bool traverse | ( | NodeType< ast::ArrayPack > * | pack | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [9/35]

bool traverse | ( | NodeType< ast::ArrayUnpack > * | pack | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [10/35]

bool traverse | ( | NodeType< ast::AssignExpression > * | asgn | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [11/35]

bool traverse | ( | NodeType< ast::Attribute > * | attr | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [12/35]

bool traverse | ( | NodeType< ast::BinaryOperator > * | bin | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [13/35]

bool traverse | ( | NodeType< ast::Block > * | block | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [14/35]

bool traverse | ( | NodeType< ast::Cast > * | cast | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [15/35]

bool traverse | ( | NodeType< ast::CommaOperator > * | comma | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [16/35]

bool traverse | ( | NodeType< ast::ConditionalStatement > * | cond | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [17/35]

bool traverse | ( | NodeType< ast::Crement > * | crmt | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [18/35]

bool traverse | ( | NodeType< ast::DeclareLocal > * | decl | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [19/35]

bool traverse | ( | NodeType< ast::ExternalVariable > * | ext | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [20/35]

bool traverse | ( | NodeType< ast::FunctionCall > * | call | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [21/35]

bool traverse | ( | NodeType< ast::Keyword > * | keyw | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [22/35]

bool traverse | ( | NodeType< ast::Local > * | loc | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [23/35]

bool traverse | ( | NodeType< ast::Loop > * | loop | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [24/35]

bool traverse | ( | NodeType< ast::Node > * | node | ) |
| inlineinherited

The default traversal method which is hit for all child traversals. The correct derived traversal scheme is selected by using the node enumerated type.

Note
  Only handles traversal on concrete node types.

## ◆ traverse() [25/35]

bool traverse | ( | NodeType< ast::StatementList > * | cond | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [26/35]

bool traverse | ( | NodeType< ast::TernaryOperator > * | tern | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [27/35]

bool traverse | ( | NodeType< ast::Tree > * | tree | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [28/35]

bool traverse | ( | NodeType< ast::UnaryOperator > * | unry | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [29/35]

bool traverse | ( | NodeType< ast::Value< bool >> * | val | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [30/35]

bool traverse | ( | NodeType< ast::Value< double >> * | val | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [31/35]

bool traverse | ( | NodeType< ast::Value< float >> * | val | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [32/35]

bool traverse | ( | NodeType< ast::Value< int16_t >> * | val | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [33/35]

bool traverse | ( | NodeType< ast::Value< int32_t >> * | val | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [34/35]

bool traverse | ( | NodeType< ast::Value< int64_t >> * | val | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ traverse() [35/35]

bool traverse | ( | NodeType< ast::Value< std::string >> * | val | ) |
| inlineinherited

Default traversals for a given concrete AST node type.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [1/60]

virtual bool visit | ( | const ast::ArrayPack * |  | ) |
| virtual

## ◆ visit() [2/60]

virtual bool visit | ( | const ast::ArrayUnpack * |  | ) |
| virtual

## ◆ visit() [3/60]

virtual bool visit | ( | const ast::AssignExpression * |  | ) |
| virtual

## ◆ visit() [4/60]

virtual bool visit | ( | const ast::Attribute * |  | ) |
| virtual

Reimplemented in VolumeComputeGenerator, and PointComputeGenerator.

## ◆ visit() [5/60]

virtual bool visit | ( | const ast::BinaryOperator * |  | ) |
| virtual

## ◆ visit() [6/60]

virtual bool visit | ( | const ast::Block * |  | ) |
| virtual

## ◆ visit() [7/60]

virtual bool visit | ( | const ast::Cast * |  | ) |
| virtual

## ◆ visit() [8/60]

virtual bool visit | ( | const ast::CommaOperator * |  | ) |
| virtual

## ◆ visit() [9/60]

virtual bool visit | ( | const ast::ConditionalStatement * |  | ) |
| virtual

## ◆ visit() [10/60]

virtual bool visit | ( | const ast::Crement * |  | ) |
| virtual

## ◆ visit() [11/60]

virtual bool visit | ( | const ast::DeclareLocal * |  | ) |
| virtual

## ◆ visit() [12/60]

virtual bool visit | ( | const ast::ExternalVariable * |  | ) |
| virtual

## ◆ visit() [13/60]

virtual bool visit | ( | const ast::FunctionCall * |  | ) |
| virtual

## ◆ visit() [14/60]

virtual bool visit | ( | const ast::Keyword * |  | ) |
| virtual

## ◆ visit() [15/60]

virtual bool visit | ( | const ast::Local * |  | ) |
| virtual

## ◆ visit() [16/60]

virtual bool visit | ( | const ast::Loop * |  | ) |
| virtual

## ◆ visit() [17/60]

virtual bool visit | ( | const ast::TernaryOperator * |  | ) |
| virtual

## ◆ visit() [18/60]

virtual bool visit | ( | const ast::Tree * |  | ) |
| virtual

## ◆ visit() [19/60]

virtual bool visit | ( | const ast::UnaryOperator * |  | ) |
| virtual

## ◆ visit() [20/60]

virtual bool visit | ( | const ast::Value< bool > * |  | ) |
| virtual

## ◆ visit() [21/60]

virtual bool visit | ( | const ast::Value< double > * |  | ) |
| virtual

## ◆ visit() [22/60]

virtual bool visit | ( | const ast::Value< float > * |  | ) |
| virtual

## ◆ visit() [23/60]

virtual bool visit | ( | const ast::Value< int16_t > * |  | ) |
| virtual

## ◆ visit() [24/60]

virtual bool visit | ( | const ast::Value< int32_t > * |  | ) |
| virtual

## ◆ visit() [25/60]

virtual bool visit | ( | const ast::Value< int64_t > * |  | ) |
| virtual

## ◆ visit() [26/60]

virtual bool visit | ( | const ast::Value< std::string > * |  | ) |
| virtual

## ◆ visit() [27/60]

std::enable_if<std::is_integral<ValueType>::value, bool>::type visit | ( | const ast::Value< ValueType > * | node | ) |

## ◆ visit() [28/60]

std::enable_if<std::is_floating_point<ValueType>::value, bool>::type visit | ( | const ast::Value< ValueType > * | node | ) |

## ◆ visit() [29/60]

bool visit | ( | NodeType< ast::ArrayPack > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [30/60]

bool visit | ( | NodeType< ast::ArrayUnpack > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [31/60]

bool visit | ( | NodeType< ast::AssignExpression > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [32/60]

bool visit | ( | NodeType< ast::Attribute > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [33/60]

bool visit | ( | NodeType< ast::BinaryOperator > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [34/60]

bool visit | ( | NodeType< ast::Block > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [35/60]

bool visit | ( | NodeType< ast::Cast > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [36/60]

bool visit | ( | NodeType< ast::CommaOperator > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [37/60]

bool visit | ( | NodeType< ast::ConditionalStatement > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [38/60]

bool visit | ( | NodeType< ast::Crement > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [39/60]

bool visit | ( | NodeType< ast::DeclareLocal > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [40/60]

bool visit | ( | NodeType< ast::Expression > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [41/60]

bool visit | ( | NodeType< ast::ExternalVariable > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [42/60]

bool visit | ( | NodeType< ast::FunctionCall > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [43/60]

bool visit | ( | NodeType< ast::Keyword > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [44/60]

bool visit | ( | NodeType< ast::Local > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [45/60]

bool visit | ( | NodeType< ast::Loop > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [46/60]

bool visit | ( | NodeType< ast::Node > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [47/60]

bool visit | ( | NodeType< ast::Statement > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [48/60]

bool visit | ( | NodeType< ast::StatementList > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [49/60]

bool visit | ( | NodeType< ast::TernaryOperator > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [50/60]

bool visit | ( | NodeType< ast::Tree > * |  | ) |
| inlineinherited

Visits for concrete Node types.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [51/60]

bool visit | ( | NodeType< ast::UnaryOperator > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [52/60]

bool visit | ( | NodeType< ast::Value< bool >> * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [53/60]

bool visit | ( | NodeType< ast::Value< double >> * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [54/60]

bool visit | ( | NodeType< ast::Value< float >> * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [55/60]

bool visit | ( | NodeType< ast::Value< int16_t >> * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [56/60]

bool visit | ( | NodeType< ast::Value< int32_t >> * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [57/60]

bool visit | ( | NodeType< ast::Value< int64_t >> * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [58/60]

bool visit | ( | NodeType< ast::Value< std::string >> * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [59/60]

bool visit | ( | NodeType< ast::ValueBase > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visit() [60/60]

bool visit | ( | NodeType< ast::Variable > * |  | ) |
| inlineinherited

Visits for abstract (pure-virtual) Node types.

Note
  These are only hit through the default behavior if Visitor::visitNodeHierarchies is enabled.

Returns
  True if traversal should continue, false to terminate

## ◆ visitNodeHierarchies()

bool visitNodeHierarchies
| inlineinherited

Default behavior option. Controls whether nodes visit themselves at each stage of their class hierarchy. If true, nodes perform multiple visits on their potentially abstract base classes. If false, only the concrete derived types are visited.

When disabled, abstract node visitor methods are never accessed directly through the default Visitor implementation. These types include Node, Statement, Expression, etc AST nodes. If true, for each linearly inherited AST node, a visit is performed on the entire hierarchy. For example, for a Local AST node which derives from Variable -> Expression -> Statement -> Node, 5 visits will be performed at each level.

## Member Data Documentation

## ◆ mBreakContinueStack

std::stack<std::pair<llvm::BasicBlock*, llvm::BasicBlock*> > mBreakContinueStack
| protected

## ◆ mBuilder

llvm::IRBuilder mBuilder
| protected

## ◆ mContext

llvm::LLVMContext& mContext
| protected

## ◆ mFunction

llvm::Function* mFunction
| protected

## ◆ mLog

Logger& mLog
| protected

## ◆ mModule

llvm::Module& mModule
| protected

## ◆ mOptions

const FunctionOptions mOptions
| protected

## ◆ mScopeIndex

size_t mScopeIndex
| protected

## ◆ mSymbolTables

SymbolTableBlocks mSymbolTables
| protected

## ◆ mValues

std::stack<llvm::Value*> mValues
| protected

The documentation for this struct was generated from the following file:

- ComputeGenerator.h