CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::ShaderCompiler::ControlPathAnalyzer Class Reference

Control path analyzer (must implement visitors for all statements). More...

#include <CeresEngine/Material/ShaderCompiler/AST/Visitor/ControlPathAnalyzer.hpp>

Inheritance diagram for CeresEngine::ShaderCompiler::ControlPathAnalyzer:
CeresEngine::ShaderCompiler::Visitor

Public Member Functions

void markControlPathsFromFunction (FunctionDeclaration &funcDeclaration)
 

Private Member Functions

void pushReturnPath (bool returnPath)
 
bool popReturnPath ()
 
void visitStatementList (const Vector< StatementPtr > &statements)
 
void visitCodeBlock (CodeBlock *ast, void *args) override
 
void visitFunctionDeclaration (FunctionDeclaration *ast, void *args) override
 
void visitUniformBufferDeclaration (UniformBufferDeclaration *ast, void *args) override
 
void visitBufferDeclarationStatement (BufferDeclarationStatement *ast, void *args) override
 
void visitSamplerDeclarationStatement (SamplerDeclarationStatement *ast, void *args) override
 
void visitVarDeclarationStatement (VarDeclarationStatement *ast, void *args) override
 
void visitAliasDeclarationStatement (AliasDeclarationStatement *ast, void *args) override
 
void visitBasicDeclarationStatement (BasicDeclarationStatement *ast, void *args) override
 
void visitNullStatement (NullStatement *ast, void *args) override
 
void visitCodeBlockStatement (CodeBlockStatement *ast, void *args) override
 
void visitForLoopStatement (ForLoopStatement *ast, void *args) override
 
void visitWhileLoopStatement (WhileLoopStatement *ast, void *args) override
 
void visitDoWhileLoopStatement (DoWhileLoopStatement *ast, void *args) override
 
void visitIfStatement (IfStatement *ast, void *args) override
 
void visitElseStatement (ElseStatement *ast, void *args) override
 
void visitSwitchStatement (SwitchStatement *ast, void *args) override
 
void visitExpressionStatement (ExpressionStatement *ast, void *args) override
 
void visitReturnStatement (ReturnStatement *ast, void *args) override
 
void visitCtrlTransferStatement (CtrlTransferStatement *ast, void *args) override
 
- Private Member Functions inherited from CeresEngine::ShaderCompiler::Visitor
virtual ~Visitor ()=default
 
virtual void visitProgram (Program *ast, void *args)
 
virtual void visitAttribute (Attribute *ast, void *args)
 
virtual void visitSwitchCase (SwitchCase *ast, void *args)
 
virtual void visitSamplerValue (SamplerValue *ast, void *args)
 
virtual void visitRegister (Register *ast, void *args)
 
virtual void visitPackOffset (PackOffset *ast, void *args)
 
virtual void visitArrayDimension (ArrayDimension *ast, void *args)
 
virtual void visitTypeSpecifier (TypeSpecifier *ast, void *args)
 
virtual void visitVarDeclaration (VarDeclaration *ast, void *args)
 
virtual void visitBufferDeclaration (BufferDeclaration *ast, void *args)
 
virtual void visitSamplerDeclaration (SamplerDeclaration *ast, void *args)
 
virtual void visitStructDeclaration (StructDeclaration *ast, void *args)
 
virtual void visitAliasDeclaration (AliasDeclaration *ast, void *args)
 
virtual void visitLayoutStatement (LayoutStatement *ast, void *args)
 
virtual void visitNullExpression (NullExpression *ast, void *args)
 
virtual void visitSequenceExpression (SequenceExpression *ast, void *args)
 
virtual void visitLiteralExpression (LiteralExpression *ast, void *args)
 
virtual void visitTypeSpecifierExpression (TypeSpecifierExpression *ast, void *args)
 
virtual void visitTernaryExpression (TernaryExpression *ast, void *args)
 
virtual void visitBinaryExpression (BinaryExpression *ast, void *args)
 
virtual void visitUnaryExpression (UnaryExpression *ast, void *args)
 
virtual void visitPostUnaryExpression (PostUnaryExpression *ast, void *args)
 
virtual void visitCallExpression (CallExpression *ast, void *args)
 
virtual void visitBracketExpression (BracketExpression *ast, void *args)
 
virtual void visitAssignExpression (AssignExpression *ast, void *args)
 
virtual void visitObjectExpression (ObjectExpression *ast, void *args)
 
virtual void visitArrayExpression (ArrayExpression *ast, void *args)
 
virtual void visitCastExpression (CastExpression *ast, void *args)
 
virtual void visitInitializerExpression (InitializerExpression *ast, void *args)
 
template<typename T >
void visit (const T &ast, void *args=nullptr)
 
template<typename T >
void visit (const Vector< T > &astList, void *args=nullptr)
 

Private Attributes

Stack< boolmReturnPathStack
 

Detailed Description

Control path analyzer (must implement visitors for all statements).

This helper class for the context analyzer marks all functions where not all control paths return a value (if the function is declared to have a return value). It also marks all statements as dead code, when they appear after a return path. Marks 'FunctionDecl::hasNonReturnControlPath' and 'AST::isDeadCode' flags.

Member Function Documentation

◆ markControlPathsFromFunction()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::markControlPathsFromFunction ( FunctionDeclaration funcDeclaration)

◆ popReturnPath()

bool CeresEngine::ShaderCompiler::ControlPathAnalyzer::popReturnPath ( )
private

◆ pushReturnPath()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::pushReturnPath ( bool  returnPath)
private

◆ visitAliasDeclarationStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitAliasDeclarationStatement ( AliasDeclarationStatement ast,
void args 
)
overrideprivatevirtual

◆ visitBasicDeclarationStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitBasicDeclarationStatement ( BasicDeclarationStatement ast,
void args 
)
overrideprivatevirtual

◆ visitBufferDeclarationStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitBufferDeclarationStatement ( BufferDeclarationStatement ast,
void args 
)
overrideprivatevirtual

◆ visitCodeBlock()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitCodeBlock ( CodeBlock ast,
void args 
)
overrideprivatevirtual

◆ visitCodeBlockStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitCodeBlockStatement ( CodeBlockStatement ast,
void args 
)
overrideprivatevirtual

◆ visitCtrlTransferStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitCtrlTransferStatement ( CtrlTransferStatement ast,
void args 
)
overrideprivatevirtual

◆ visitDoWhileLoopStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitDoWhileLoopStatement ( DoWhileLoopStatement ast,
void args 
)
overrideprivatevirtual

◆ visitElseStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitElseStatement ( ElseStatement ast,
void args 
)
overrideprivatevirtual

◆ visitExpressionStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitExpressionStatement ( ExpressionStatement ast,
void args 
)
overrideprivatevirtual

◆ visitForLoopStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitForLoopStatement ( ForLoopStatement ast,
void args 
)
overrideprivatevirtual

◆ visitFunctionDeclaration()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitFunctionDeclaration ( FunctionDeclaration ast,
void args 
)
overrideprivatevirtual

◆ visitIfStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitIfStatement ( IfStatement ast,
void args 
)
overrideprivatevirtual

◆ visitNullStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitNullStatement ( NullStatement ast,
void args 
)
overrideprivatevirtual

◆ visitReturnStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitReturnStatement ( ReturnStatement ast,
void args 
)
overrideprivatevirtual

◆ visitSamplerDeclarationStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitSamplerDeclarationStatement ( SamplerDeclarationStatement ast,
void args 
)
overrideprivatevirtual

◆ visitStatementList()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitStatementList ( const Vector< StatementPtr > &  statements)
private

◆ visitSwitchStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitSwitchStatement ( SwitchStatement ast,
void args 
)
overrideprivatevirtual

◆ visitUniformBufferDeclaration()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitUniformBufferDeclaration ( UniformBufferDeclaration ast,
void args 
)
overrideprivatevirtual

◆ visitVarDeclarationStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitVarDeclarationStatement ( VarDeclarationStatement ast,
void args 
)
overrideprivatevirtual

◆ visitWhileLoopStatement()

void CeresEngine::ShaderCompiler::ControlPathAnalyzer::visitWhileLoopStatement ( WhileLoopStatement ast,
void args 
)
overrideprivatevirtual

Member Data Documentation

◆ mReturnPathStack

Stack<bool> CeresEngine::ShaderCompiler::ControlPathAnalyzer::mReturnPathStack
private

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