FreeTensor
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
freetensor::SymbolTable< BaseClass > Class Template Reference

#include <symbol_table.h>

Inheritance diagram for freetensor::SymbolTable< BaseClass >:
Inheritance graph
[legend]
Collaboration diagram for freetensor::SymbolTable< BaseClass >:
Collaboration graph
[legend]

Public Member Functions

template<class... T>
 SymbolTable (T &&...args)
 
const std::unordered_set< std::string > & names () const override
 
const std::unordered_map< std::string, VarDef > & defs () const override
 
const std::unordered_map< std::string, For > & loops () const override
 
bool hasDef (const std::string &name) const override
 
const VarDefdef (const std::string &name) const override
 
Ref< Bufferbuffer (const std::string &name) const override
 
bool hasLoop (const std::string &name) const override
 
const Forloop (const std::string &name) const override
 
void pushDef (const VarDef &op) override
 
void popDef (const VarDef &op) override
 
void pushFor (const For &op) override
 
void popFor (const For &op) override
 
const SymbolTableDatasymbolTableSnapshot () const
 
virtual const std::unordered_set< std::string > & names () const =0
 
virtual const std::unordered_map< std::string, VarDef > & defs () const =0
 
virtual const std::unordered_map< std::string, For > & loops () const =0
 
virtual bool hasDef (const std::string &name) const =0
 
virtual const VarDefdef (const std::string &name) const =0
 
virtual Ref< Bufferbuffer (const std::string &name) const =0
 
virtual bool hasLoop (const std::string &name) const =0
 
virtual const Forloop (const std::string &name) const =0
 
virtual void pushDef (const VarDef &op)=0
 
virtual void popDef (const VarDef &op)=0
 
virtual void pushFor (const For &op)=0
 
virtual void popFor (const For &op)=0
 

Protected Member Functions

BaseClass::StmtRetType visit (const VarDef &op) override
 
BaseClass::StmtRetType visit (const For &op) override
 

Detailed Description

template<class BaseClass>
class freetensor::SymbolTable< BaseClass >

A symbol table context for Visitor or Mutator

Inherit this class to use. E.g., inherit SymbolTable<Visitor> or SymbolTable<Mutator>

This class will automatically maintains the symbol table if the sub-class calls visit(VarDef), which is the suggested usage

However, in some cases, this is impossible, e.g., when the sub-class needs to recurse into different sub-trees manually. In these cases, the sub-class should explicitly call the pushDef / popDef or pushFor / popFor methods

Constructor & Destructor Documentation

◆ SymbolTable()

template<class BaseClass >
template<class... T>
freetensor::SymbolTable< BaseClass >::SymbolTable ( T &&...  args)
inline

Member Function Documentation

◆ buffer()

template<class BaseClass >
Ref< Buffer > freetensor::SymbolTable< BaseClass >::buffer ( const std::string &  name) const
inlineoverridevirtual

◆ def()

template<class BaseClass >
const VarDef & freetensor::SymbolTable< BaseClass >::def ( const std::string &  name) const
inlineoverridevirtual

◆ defs()

template<class BaseClass >
const std::unordered_map< std::string, VarDef > & freetensor::SymbolTable< BaseClass >::defs ( ) const
inlineoverridevirtual

◆ hasDef()

template<class BaseClass >
bool freetensor::SymbolTable< BaseClass >::hasDef ( const std::string &  name) const
inlineoverridevirtual

◆ hasLoop()

template<class BaseClass >
bool freetensor::SymbolTable< BaseClass >::hasLoop ( const std::string &  name) const
inlineoverridevirtual

◆ loop()

template<class BaseClass >
const For & freetensor::SymbolTable< BaseClass >::loop ( const std::string &  name) const
inlineoverridevirtual

◆ loops()

template<class BaseClass >
const std::unordered_map< std::string, For > & freetensor::SymbolTable< BaseClass >::loops ( ) const
inlineoverridevirtual

◆ names()

template<class BaseClass >
const std::unordered_set< std::string > & freetensor::SymbolTable< BaseClass >::names ( ) const
inlineoverridevirtual

◆ popDef()

template<class BaseClass >
void freetensor::SymbolTable< BaseClass >::popDef ( const VarDef op)
inlineoverridevirtual

◆ popFor()

template<class BaseClass >
void freetensor::SymbolTable< BaseClass >::popFor ( const For op)
inlineoverridevirtual

◆ pushDef()

template<class BaseClass >
void freetensor::SymbolTable< BaseClass >::pushDef ( const VarDef op)
inlineoverridevirtual

◆ pushFor()

template<class BaseClass >
void freetensor::SymbolTable< BaseClass >::pushFor ( const For op)
inlineoverridevirtual

◆ symbolTableSnapshot()

template<class BaseClass >
const SymbolTableData & freetensor::SymbolTable< BaseClass >::symbolTableSnapshot ( ) const
inline

◆ visit() [1/2]

template<class BaseClass >
BaseClass::StmtRetType freetensor::SymbolTable< BaseClass >::visit ( const For op)
inlineoverrideprotected

◆ visit() [2/2]

template<class BaseClass >
BaseClass::StmtRetType freetensor::SymbolTable< BaseClass >::visit ( const VarDef op)
inlineoverrideprotected

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