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)
 
ReportHandler & getReportHandler ()
 
bool isWarningEnabled (UInt32 flags) const
 
void openScope ()
 
void closeScope ()
 
void register_ (const String &ident, AST *ast)
 
AST * fetch (const String &ident, const AST *ast=nullptr)
 
AST * fetchFromCurrentScopeOrNull (const String &ident) const
 
Declaration * fetchDeclaration (const String &ident, const AST *ast=nullptr)
 
Declaration * fetchType (const String &ident, const AST *ast=nullptr)
 
VarDeclaration * fetchVarDeclaration (const String &ident, const AST *ast=nullptr)
 
FunctionDeclaration * fetchFunctionDeclaration (const String &ident, const Vector< ExpressionPtr > &args, const AST *ast=nullptr)
 
FunctionDeclaration * fetchFunctionDeclaration (const String &ident, const AST *ast=nullptr)
 
VarDeclaration * fetchVarDeclarationFromStruct (const StructTypeDenoter &structTypeDenoter, const String &ident, const AST *ast=nullptr)
 
FunctionDeclaration * fetchFunctionDeclarationFromStruct (const StructTypeDenoter &structTypeDenoter, const String &ident, const Vector< ExpressionPtr > &args, const AST *ast=nullptr)
 
StructDeclaration * fetchStructDeclarationFromIdent (const String &ident, const AST *ast=nullptr)
 
StructDeclaration * fetchStructDeclarationFromTypeDenoter (const TypeDenoter &typeDenoter)
 
StructDeclaration * findCompatibleStructDeclaration (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
 
FunctionDeclaration * getActiveFunctionDeclaration () const
 
StructDeclaration * getActiveFunctionStructDeclaration () const
 
void pushCallExpression (CallExpression *callExpression)
 
void popCallExpression ()
 
CallExpression * getActiveCallExpression () const
 
void pushLValueExpression (Expression *expression)
 
void popLValueExpression ()
 
Expression * getActiveLValueExpression () const
 
void pushStructDeclaration (StructDeclaration *structDeclaration)
 
void popStructDeclaration ()
 
bool isInsideStructDeclaration () const
 
StructDeclaration * getActiveStructDeclaration () 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
 
VarDeclarationStatement * getActiveVarDeclarationStatement () 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
 
SourceCode * mSourceCode = 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: