CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::ShaderCompiler::Analyzer Class Referenceabstract

#include <CeresEngine/Material/ShaderCompiler/Frontend/Analyzer.hpp>

Inheritance diagram for CeresEngine::ShaderCompiler::Analyzer:
CeresEngine::ShaderCompiler::VisitorTracker CeresEngine::ShaderCompiler::Visitor CeresEngine::ShaderCompiler::HLSLAnalyzer

Public Member Functions

 Analyzer (Log *log=nullptr)
 
bool decorateAST (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc)
 

Protected Types

using OnOverrideProc = ASTSymbolTable::OnOverrideProc
 

Protected Member Functions

virtual void decorateASTPrimary (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc)=0
 
void submitReport (bool isError, const String &msg, const AST *ast=nullptr, const Vector< const AST * > &astAppendices={})
 
void error (const String &msg, const AST *ast=nullptr, const Vector< const AST * > &astAppendices={})
 
void errorUndeclaredIdent (const String &ident, const AST *ast=nullptr)
 
void errorUndeclaredIdent (const String &ident, const String &contextName, const AST *ast=nullptr)
 
void errorUndeclaredIdent (const String &ident, const String &contextName, const String &similarIdent, const AST *ast=nullptr)
 
void errorInternal (const String &msg, const AST *ast=nullptr)
 
void warning (const String &msg, const AST *ast=nullptr)
 
void warningOnNullStatement (const StatementPtr &ast, const String &statementTypeName)
 
ReportHandlergetReportHandler ()
 
bool isWarningEnabled (UInt32 flags) const
 
void openScope ()
 
void closeScope ()
 
void register_ (const String &ident, AST *ast)
 
ASTfetch (const String &ident, const AST *ast=nullptr)
 
ASTfetchFromCurrentScopeOrNull (const String &ident) const
 
DeclarationfetchDeclaration (const String &ident, const AST *ast=nullptr)
 
DeclarationfetchType (const String &ident, const AST *ast=nullptr)
 
VarDeclarationfetchVarDeclaration (const String &ident, const AST *ast=nullptr)
 
FunctionDeclarationfetchFunctionDeclaration (const String &ident, const Vector< ExpressionPtr > &args, const AST *ast=nullptr)
 
FunctionDeclarationfetchFunctionDeclaration (const String &ident, const AST *ast=nullptr)
 
VarDeclarationfetchVarDeclarationFromStruct (const StructTypeDenoter &structTypeDenoter, const String &ident, const AST *ast=nullptr)
 
FunctionDeclarationfetchFunctionDeclarationFromStruct (const StructTypeDenoter &structTypeDenoter, const String &ident, const Vector< ExpressionPtr > &args, const AST *ast=nullptr)
 
StructDeclarationfetchStructDeclarationFromIdent (const String &ident, const AST *ast=nullptr)
 
StructDeclarationfetchStructDeclarationFromTypeDenoter (const TypeDenoter &typeDenoter)
 
StructDeclarationfindCompatibleStructDeclaration (const StructDeclaration &rhs)
 
bool isInsideGlobalScope () const
 
void analyzeTypeDenoter (TypeDenoterPtr &typeDenoter, const AST *ast)
 
void analyzeBufferTypeDenoter (BufferTypeDenoter &bufferTypeDen, const AST *ast)
 
void analyzeStructTypeDenoter (StructTypeDenoter &structTypeDen, const AST *ast)
 
void analyzeAliasTypeDenoter (TypeDenoterPtr &typeDenoter, const AST *ast)
 
void analyzeTypeSpecifier (TypeSpecifier *typeSpecifier)
 
void analyzeTypeSpecifierForParameter (const TypeSpecifier *typeSpecifier)
 
void analyzeFunctionEndOfScopes (const FunctionDeclaration &funcDeclaration)
 
void analyzeFunctionControlPath (FunctionDeclaration &funcDeclaration)
 
TypeDenoterPtr getTypeDenoterFrom (TypedAST *ast, const TypeDenoter *expectedTypeDenoter=nullptr)
 
void validateTypeCast (const TypeDenoter &sourceTypeDen, const TypeDenoter &destTypeDen, const String &contextDesc, const AST *ast=nullptr)
 
void validateTypeCastFrom (TypedAST *sourceAST, TypedAST *destAST, const String &contextDesc)
 
void analyzeConditionalExpression (Expression *expression)
 
Variant evaluateConstExpression (Expression &expression)
 
Variant evaluateConstExpressionObject (const ObjectExpression &expression)
 
Variant evaluateOrDefault (Expression &expression, const Variant &defaultValue={})
 
Int32 evaluateConstExpressionInt (Expression &expression)
 
float evaluateConstExpressionFloat (Expression &expression)
 
- Protected Member Functions inherited from CeresEngine::ShaderCompiler::VisitorTracker
bool isInsideGlobalScope () const
 
void pushFunctionDeclaration (FunctionDeclaration *funcDeclaration)
 
void popFunctionDeclaration ()
 
bool isInsideFunctionDeclaration () const
 
bool isInsideEntryPoint () const
 
bool isInsideSecondaryEntryPoint () const
 
FunctionDeclarationgetActiveFunctionDeclaration () const
 
StructDeclarationgetActiveFunctionStructDeclaration () const
 
void pushCallExpression (CallExpression *callExpression)
 
void popCallExpression ()
 
CallExpressiongetActiveCallExpression () const
 
void pushLValueExpression (Expression *expression)
 
void popLValueExpression ()
 
ExpressiongetActiveLValueExpression () const
 
void pushStructDeclaration (StructDeclaration *structDeclaration)
 
void popStructDeclaration ()
 
bool isInsideStructDeclaration () const
 
StructDeclarationgetActiveStructDeclaration () const
 
const Vector< StructDeclaration * > & getStructDeclarationStack () const
 
void pushUniformBufferDeclaration (UniformBufferDeclaration *uniformBufferDeclaration)
 
void popUniformBufferDeclaration ()
 
bool isInsideUniformBufferDeclaration () const
 
const Vector< UniformBufferDeclaration * > & getUniformBufferDeclarationStack () const
 
void pushVarDeclarationStatement (VarDeclarationStatement *varDeclarationStatement)
 
void popVarDeclarationStatement ()
 
bool isInsideVarDeclarationStatement () const
 
VarDeclarationStatementgetActiveVarDeclarationStatement () const
 
- Protected Member Functions inherited from CeresEngine::ShaderCompiler::Visitor
template<typename T >
void visit (const T &ast, void *args=nullptr)
 
template<typename T >
void visit (const Vector< T > &astList, void *args=nullptr)
 
virtual ~Visitor ()=default
 
virtual void visitProgram (Program *ast, void *args)
 
virtual void visitCodeBlock (CodeBlock *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 visitFunctionDeclaration (FunctionDeclaration *ast, void *args)
 
virtual void visitUniformBufferDeclaration (UniformBufferDeclaration *ast, void *args)
 
virtual void visitBufferDeclarationStatement (BufferDeclarationStatement *ast, void *args)
 
virtual void visitSamplerDeclarationStatement (SamplerDeclarationStatement *ast, void *args)
 
virtual void visitVarDeclarationStatement (VarDeclarationStatement *ast, void *args)
 
virtual void visitAliasDeclarationStatement (AliasDeclarationStatement *ast, void *args)
 
virtual void visitBasicDeclarationStatement (BasicDeclarationStatement *ast, void *args)
 
virtual void visitNullStatement (NullStatement *ast, void *args)
 
virtual void visitCodeBlockStatement (CodeBlockStatement *ast, void *args)
 
virtual void visitForLoopStatement (ForLoopStatement *ast, void *args)
 
virtual void visitWhileLoopStatement (WhileLoopStatement *ast, void *args)
 
virtual void visitDoWhileLoopStatement (DoWhileLoopStatement *ast, void *args)
 
virtual void visitIfStatement (IfStatement *ast, void *args)
 
virtual void visitElseStatement (ElseStatement *ast, void *args)
 
virtual void visitSwitchStatement (SwitchStatement *ast, void *args)
 
virtual void visitExpressionStatement (ExpressionStatement *ast, void *args)
 
virtual void visitReturnStatement (ReturnStatement *ast, void *args)
 
virtual void visitCtrlTransferStatement (CtrlTransferStatement *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)
 

Private Member Functions

bool collectArgumentTypeDenoters (const Vector< ExpressionPtr > &args, Vector< TypeDenoterPtr > &argTypeDens)
 
String fetchSimilarIdent (const String &ident, StructDeclaration *structDeclaration=nullptr) const
 
void onReleaseSymbol (const ASTSymbolOverloadPtr &symbol)
 

Private Attributes

ReportHandler mReportHandler
 
SourceCodemSourceCode = nullptr
 
ASTSymbolOverloadTable mSymTable
 
RawFlags mWarnings
 

Member Typedef Documentation

◆ OnOverrideProc

Constructor & Destructor Documentation

◆ Analyzer()

CeresEngine::ShaderCompiler::Analyzer::Analyzer ( Log log = nullptr)

Member Function Documentation

◆ analyzeAliasTypeDenoter()

void CeresEngine::ShaderCompiler::Analyzer::analyzeAliasTypeDenoter ( TypeDenoterPtr typeDenoter,
const AST ast 
)
protected

◆ analyzeBufferTypeDenoter()

void CeresEngine::ShaderCompiler::Analyzer::analyzeBufferTypeDenoter ( BufferTypeDenoter bufferTypeDen,
const AST ast 
)
protected

◆ analyzeConditionalExpression()

void CeresEngine::ShaderCompiler::Analyzer::analyzeConditionalExpression ( Expression expression)
protected

◆ analyzeFunctionControlPath()

void CeresEngine::ShaderCompiler::Analyzer::analyzeFunctionControlPath ( FunctionDeclaration funcDeclaration)
protected

◆ analyzeFunctionEndOfScopes()

void CeresEngine::ShaderCompiler::Analyzer::analyzeFunctionEndOfScopes ( const FunctionDeclaration funcDeclaration)
protected

◆ analyzeStructTypeDenoter()

void CeresEngine::ShaderCompiler::Analyzer::analyzeStructTypeDenoter ( StructTypeDenoter structTypeDen,
const AST ast 
)
protected

◆ analyzeTypeDenoter()

void CeresEngine::ShaderCompiler::Analyzer::analyzeTypeDenoter ( TypeDenoterPtr typeDenoter,
const AST ast 
)
protected

◆ analyzeTypeSpecifier()

void CeresEngine::ShaderCompiler::Analyzer::analyzeTypeSpecifier ( TypeSpecifier typeSpecifier)
protected

◆ analyzeTypeSpecifierForParameter()

void CeresEngine::ShaderCompiler::Analyzer::analyzeTypeSpecifierForParameter ( const TypeSpecifier typeSpecifier)
protected

◆ closeScope()

void CeresEngine::ShaderCompiler::Analyzer::closeScope ( )
protected

◆ collectArgumentTypeDenoters()

bool CeresEngine::ShaderCompiler::Analyzer::collectArgumentTypeDenoters ( const Vector< ExpressionPtr > &  args,
Vector< TypeDenoterPtr > &  argTypeDens 
)
private

◆ decorateAST()

bool CeresEngine::ShaderCompiler::Analyzer::decorateAST ( Program program,
const ShaderInput inputDesc,
const ShaderOutput outputDesc 
)

◆ decorateASTPrimary()

virtual void CeresEngine::ShaderCompiler::Analyzer::decorateASTPrimary ( Program program,
const ShaderInput inputDesc,
const ShaderOutput outputDesc 
)
protectedpure virtual

◆ error()

void CeresEngine::ShaderCompiler::Analyzer::error ( const String msg,
const AST ast = nullptr,
const Vector< const AST * > &  astAppendices = {} 
)
protected

◆ errorInternal()

void CeresEngine::ShaderCompiler::Analyzer::errorInternal ( const String msg,
const AST ast = nullptr 
)
protected

◆ errorUndeclaredIdent() [1/3]

void CeresEngine::ShaderCompiler::Analyzer::errorUndeclaredIdent ( const String ident,
const AST ast = nullptr 
)
protected

◆ errorUndeclaredIdent() [2/3]

void CeresEngine::ShaderCompiler::Analyzer::errorUndeclaredIdent ( const String ident,
const String contextName,
const AST ast = nullptr 
)
protected

◆ errorUndeclaredIdent() [3/3]

void CeresEngine::ShaderCompiler::Analyzer::errorUndeclaredIdent ( const String ident,
const String contextName,
const String similarIdent,
const AST ast = nullptr 
)
protected

◆ evaluateConstExpression()

Variant CeresEngine::ShaderCompiler::Analyzer::evaluateConstExpression ( Expression expression)
protected

◆ evaluateConstExpressionFloat()

float CeresEngine::ShaderCompiler::Analyzer::evaluateConstExpressionFloat ( Expression expression)
protected

◆ evaluateConstExpressionInt()

Int32 CeresEngine::ShaderCompiler::Analyzer::evaluateConstExpressionInt ( Expression expression)
protected

◆ evaluateConstExpressionObject()

Variant CeresEngine::ShaderCompiler::Analyzer::evaluateConstExpressionObject ( const ObjectExpression expression)
protected

◆ evaluateOrDefault()

Variant CeresEngine::ShaderCompiler::Analyzer::evaluateOrDefault ( Expression expression,
const Variant defaultValue = {} 
)
protected

◆ fetch()

AST * CeresEngine::ShaderCompiler::Analyzer::fetch ( const String ident,
const AST ast = nullptr 
)
protected

◆ fetchDeclaration()

Declaration * CeresEngine::ShaderCompiler::Analyzer::fetchDeclaration ( const String ident,
const AST ast = nullptr 
)
protected

◆ fetchFromCurrentScopeOrNull()

AST * CeresEngine::ShaderCompiler::Analyzer::fetchFromCurrentScopeOrNull ( const String ident) const
protected

◆ fetchFunctionDeclaration() [1/2]

FunctionDeclaration * CeresEngine::ShaderCompiler::Analyzer::fetchFunctionDeclaration ( const String ident,
const AST ast = nullptr 
)
protected

◆ fetchFunctionDeclaration() [2/2]

FunctionDeclaration * CeresEngine::ShaderCompiler::Analyzer::fetchFunctionDeclaration ( const String ident,
const Vector< ExpressionPtr > &  args,
const AST ast = nullptr 
)
protected

◆ fetchFunctionDeclarationFromStruct()

FunctionDeclaration * CeresEngine::ShaderCompiler::Analyzer::fetchFunctionDeclarationFromStruct ( const StructTypeDenoter structTypeDenoter,
const String ident,
const Vector< ExpressionPtr > &  args,
const AST ast = nullptr 
)
protected

◆ fetchSimilarIdent()

String CeresEngine::ShaderCompiler::Analyzer::fetchSimilarIdent ( const String ident,
StructDeclaration structDeclaration = nullptr 
) const
private

◆ fetchStructDeclarationFromIdent()

StructDeclaration * CeresEngine::ShaderCompiler::Analyzer::fetchStructDeclarationFromIdent ( const String ident,
const AST ast = nullptr 
)
protected

◆ fetchStructDeclarationFromTypeDenoter()

StructDeclaration * CeresEngine::ShaderCompiler::Analyzer::fetchStructDeclarationFromTypeDenoter ( const TypeDenoter typeDenoter)
protected

◆ fetchType()

Declaration * CeresEngine::ShaderCompiler::Analyzer::fetchType ( const String ident,
const AST ast = nullptr 
)
protected

◆ fetchVarDeclaration()

VarDeclaration * CeresEngine::ShaderCompiler::Analyzer::fetchVarDeclaration ( const String ident,
const AST ast = nullptr 
)
protected

◆ fetchVarDeclarationFromStruct()

VarDeclaration * CeresEngine::ShaderCompiler::Analyzer::fetchVarDeclarationFromStruct ( const StructTypeDenoter structTypeDenoter,
const String ident,
const AST ast = nullptr 
)
protected

◆ findCompatibleStructDeclaration()

StructDeclaration * CeresEngine::ShaderCompiler::Analyzer::findCompatibleStructDeclaration ( const StructDeclaration rhs)
protected

◆ getReportHandler()

ReportHandler & CeresEngine::ShaderCompiler::Analyzer::getReportHandler ( )
inlineprotected

◆ getTypeDenoterFrom()

TypeDenoterPtr CeresEngine::ShaderCompiler::Analyzer::getTypeDenoterFrom ( TypedAST ast,
const TypeDenoter expectedTypeDenoter = nullptr 
)
protected

◆ isInsideGlobalScope()

bool CeresEngine::ShaderCompiler::Analyzer::isInsideGlobalScope ( ) const
protected

◆ isWarningEnabled()

bool CeresEngine::ShaderCompiler::Analyzer::isWarningEnabled ( UInt32  flags) const
protected

◆ onReleaseSymbol()

void CeresEngine::ShaderCompiler::Analyzer::onReleaseSymbol ( const ASTSymbolOverloadPtr symbol)
private

◆ openScope()

void CeresEngine::ShaderCompiler::Analyzer::openScope ( )
protected

◆ register_()

void CeresEngine::ShaderCompiler::Analyzer::register_ ( const String ident,
AST ast 
)
protected

◆ submitReport()

void CeresEngine::ShaderCompiler::Analyzer::submitReport ( bool  isError,
const String msg,
const AST ast = nullptr,
const Vector< const AST * > &  astAppendices = {} 
)
protected

◆ validateTypeCast()

void CeresEngine::ShaderCompiler::Analyzer::validateTypeCast ( const TypeDenoter sourceTypeDen,
const TypeDenoter destTypeDen,
const String contextDesc,
const AST ast = nullptr 
)
protected

◆ validateTypeCastFrom()

void CeresEngine::ShaderCompiler::Analyzer::validateTypeCastFrom ( TypedAST sourceAST,
TypedAST destAST,
const String contextDesc 
)
protected

◆ warning()

void CeresEngine::ShaderCompiler::Analyzer::warning ( const String msg,
const AST ast = nullptr 
)
protected

◆ warningOnNullStatement()

void CeresEngine::ShaderCompiler::Analyzer::warningOnNullStatement ( const StatementPtr ast,
const String statementTypeName 
)
protected

Member Data Documentation

◆ mReportHandler

ReportHandler CeresEngine::ShaderCompiler::Analyzer::mReportHandler
private

◆ mSourceCode

SourceCode* CeresEngine::ShaderCompiler::Analyzer::mSourceCode = nullptr
private

◆ mSymTable

ASTSymbolOverloadTable CeresEngine::ShaderCompiler::Analyzer::mSymTable
private

◆ mWarnings

RawFlags CeresEngine::ShaderCompiler::Analyzer::mWarnings
private

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