OpenVDB 11.0.0
Loading...
Searching...
No Matches
SymbolTableBlocks Struct Reference

A map of unique ids to symbol tables which can be used to represent local variables within a program. New scopes can be added and erased where necessary and iterated through using find(). Find assumes that tables are added through parented ascending ids. More...

#include <openvdb_ax/codegen/SymbolTable.h>

Public Types

using MapType = std::map<size_t, SymbolTable>
 

Public Member Functions

 SymbolTableBlocks ()
 
 ~SymbolTableBlocks ()=default
 
SymbolTableglobals ()
 Access to the list of global variables which are always accessible.
 
const SymbolTableglobals () const
 
bool erase (const size_t index)
 Erase a given scoped indexed SymbolTable from the list of held SymbolTables. Returns true if the table previously existed.
 
SymbolTablegetOrInsert (const size_t index)
 Get or insert and get a SymbolTable with a unique index.
 
SymbolTableget (const size_t index)
 Get a SymbolTable with a unique index. If it doesn't exist, nullptr is returned.
 
llvm::Value * find (const std::string &name, const size_t startIndex) const
 Find a variable within the program starting at a given table index. If the given index does not exist, the next descending index is used.
 
llvm::Value * find (const std::string &name) const
 Find a variable within the program starting at the lowest level SymbolTable.
 
bool replace (const std::string &name, llvm::Value *value)
 Replace the first occurrance of a variable with a given name with a replacement value. Returns true if a replacement occurred.
 

Detailed Description

A map of unique ids to symbol tables which can be used to represent local variables within a program. New scopes can be added and erased where necessary and iterated through using find(). Find assumes that tables are added through parented ascending ids.

Note
The zero id is used to represent global variables
The block symbol table is fairly simple and currently only supports insertion by integer ids. Scopes that exist at the same level are expected to be built in isolation and erase and re-create the desired ids where necessary.

Member Typedef Documentation

◆ MapType

using MapType = std::map<size_t, SymbolTable>

Constructor & Destructor Documentation

◆ SymbolTableBlocks()

SymbolTableBlocks ( )
inline

◆ ~SymbolTableBlocks()

~SymbolTableBlocks ( )
default

Member Function Documentation

◆ erase()

bool erase ( const size_t index)
inline

Erase a given scoped indexed SymbolTable from the list of held SymbolTables. Returns true if the table previously existed.

Note
If the zero index is supplied, this function throws a runtime error
Parameters
indexThe SymbolTable index to erase

◆ find() [1/2]

llvm::Value * find ( const std::string & name) const
inline

Find a variable within the program starting at the lowest level SymbolTable.

Parameters
nameThe variable name to find

◆ find() [2/2]

llvm::Value * find ( const std::string & name,
const size_t startIndex ) const
inline

Find a variable within the program starting at a given table index. If the given index does not exist, the next descending index is used.

Note
This function assumes that tables have been added in ascending order dictating their nested structure.
Parameters
nameThe variable name to find
startIndexThe start SymbolTable index

◆ get()

SymbolTable * get ( const size_t index)
inline

Get a SymbolTable with a unique index. If it doesn't exist, nullptr is returned.

Parameters
indexThe SymbolTable index

◆ getOrInsert()

SymbolTable * getOrInsert ( const size_t index)
inline

Get or insert and get a SymbolTable with a unique index.

Parameters
indexThe SymbolTable index

◆ globals() [1/2]

SymbolTable & globals ( )
inline

Access to the list of global variables which are always accessible.

◆ globals() [2/2]

const SymbolTable & globals ( ) const
inline

◆ replace()

bool replace ( const std::string & name,
llvm::Value * value )
inline

Replace the first occurrance of a variable with a given name with a replacement value. Returns true if a replacement occurred.

Parameters
nameThe variable name to find and replace
valueThe llvm::Value to replace