CeresEngine
0.2.0
A game development framework
Loading...
Searching...
No Matches
Optimizer.hpp
Go to the documentation of this file.
1
//
2
// CeresEngine - A game development framework
3
//
4
// Created by Rogiel Sulzbach.
5
// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6
//
7
8
#pragma once
9
10
#include "
Visitor.hpp
"
11
12
#include "
CeresEngine/Foundation/Container/Vector.hpp
"
13
14
namespace
CeresEngine::ShaderCompiler
{
15
16
//TODO: replace this class by "ExpressionConverter".
17
18
// This AST optimizer supports only little optimizations such as null-statement removal.
19
class
Optimizer
:
private
Visitor
{
20
public
:
21
// Optimizes the specified program AST.
22
void
optimize
(
Program
& program);
23
24
private
:
25
void
optimizeStatementList
(
Vector<StatementPtr>
& statements);
26
27
void
optimizeExpression
(
ExpressionPtr
& expression);
28
29
[[
nodiscard
]]
bool
canRemoveStatement
(
const
Statement
&
ast
)
const
;
30
31
private
:
// Visitor implementation
32
DECLARATION_VISIT_PROC
(
CodeBlock
);
33
DECLARATION_VISIT_PROC
(
SwitchCase
);
34
DECLARATION_VISIT_PROC
(
ArrayDimension
);
35
36
DECLARATION_VISIT_PROC
(
VarDeclaration
);
37
38
DECLARATION_VISIT_PROC
(
ForLoopStatement
);
39
DECLARATION_VISIT_PROC
(
WhileLoopStatement
);
40
DECLARATION_VISIT_PROC
(
DoWhileLoopStatement
);
41
DECLARATION_VISIT_PROC
(
IfStatement
);
42
DECLARATION_VISIT_PROC
(
ElseStatement
);
43
DECLARATION_VISIT_PROC
(
SwitchStatement
);
44
DECLARATION_VISIT_PROC
(
ExpressionStatement
);
45
DECLARATION_VISIT_PROC
(
ReturnStatement
);
46
47
DECLARATION_VISIT_PROC
(
SequenceExpression
);
48
DECLARATION_VISIT_PROC
(
TernaryExpression
);
49
DECLARATION_VISIT_PROC
(
BinaryExpression
);
50
DECLARATION_VISIT_PROC
(
UnaryExpression
);
51
DECLARATION_VISIT_PROC
(
PostUnaryExpression
);
52
DECLARATION_VISIT_PROC
(
BracketExpression
);
53
DECLARATION_VISIT_PROC
(
ObjectExpression
);
54
DECLARATION_VISIT_PROC
(
AssignExpression
);
55
DECLARATION_VISIT_PROC
(
ArrayExpression
);
56
DECLARATION_VISIT_PROC
(
CastExpression
);
57
DECLARATION_VISIT_PROC
(
InitializerExpression
);
58
};
59
60
}
// namespace CeresEngine::ShaderCompiler
Vector.hpp
Visitor.hpp
DECLARATION_VISIT_PROC
#define DECLARATION_VISIT_PROC(CLASS_NAME)
Definition
Visitor.hpp:88
CeresEngine::ShaderCompiler::Optimizer
Definition
Optimizer.hpp:19
CeresEngine::ShaderCompiler::Optimizer::optimizeStatementList
void optimizeStatementList(Vector< StatementPtr > &statements)
CeresEngine::ShaderCompiler::Optimizer::canRemoveStatement
bool canRemoveStatement(const Statement &ast) const
CeresEngine::ShaderCompiler::Optimizer::optimizeExpression
void optimizeExpression(ExpressionPtr &expression)
CeresEngine::ShaderCompiler::Optimizer::optimize
void optimize(Program &program)
CeresEngine::ShaderCompiler::Visitor
Definition
Visitor.hpp:92
CeresEngine::ShaderCompiler
Definition
AST.hpp:33
CeresEngine::ShaderCompiler::ExpressionPtr
SPtr< Expression > ExpressionPtr
Definition
Visitor.hpp:26
CeresEngine::Vector
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition
Vector.hpp:17
CeresEngine::hash
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition
Hash.hpp:25
CeresEngine::ShaderCompiler::ArrayDimension
Definition
AST.hpp:453
CeresEngine::ShaderCompiler::ArrayExpression
Definition
AST.hpp:1302
CeresEngine::ShaderCompiler::AssignExpression
Definition
AST.hpp:1244
CeresEngine::ShaderCompiler::BinaryExpression
Definition
AST.hpp:1135
CeresEngine::ShaderCompiler::BracketExpression
Definition
AST.hpp:1232
CeresEngine::ShaderCompiler::CastExpression
Definition
AST.hpp:1319
CeresEngine::ShaderCompiler::CodeBlock
Definition
AST.hpp:388
CeresEngine::ShaderCompiler::DoWhileLoopStatement
Definition
AST.hpp:998
CeresEngine::ShaderCompiler::ElseStatement
Definition
AST.hpp:1015
CeresEngine::ShaderCompiler::ExpressionStatement
Definition
AST.hpp:1030
CeresEngine::ShaderCompiler::ForLoopStatement
Definition
AST.hpp:980
CeresEngine::ShaderCompiler::IfStatement
Definition
AST.hpp:1006
CeresEngine::ShaderCompiler::InitializerExpression
Definition
AST.hpp:1331
CeresEngine::ShaderCompiler::ObjectExpression
Definition
AST.hpp:1257
CeresEngine::ShaderCompiler::PostUnaryExpression
Definition
AST.hpp:1159
CeresEngine::ShaderCompiler::Program
Definition
AST.hpp:303
CeresEngine::ShaderCompiler::ReturnStatement
Definition
AST.hpp:1037
CeresEngine::ShaderCompiler::SequenceExpression
Definition
AST.hpp:1072
CeresEngine::ShaderCompiler::Statement
Definition
AST.hpp:215
CeresEngine::ShaderCompiler::SwitchCase
Definition
AST.hpp:416
CeresEngine::ShaderCompiler::SwitchStatement
Definition
AST.hpp:1022
CeresEngine::ShaderCompiler::TernaryExpression
Definition
AST.hpp:1120
CeresEngine::ShaderCompiler::UnaryExpression
Definition
AST.hpp:1147
CeresEngine::ShaderCompiler::VarDeclaration
Definition
AST.hpp:521
CeresEngine::ShaderCompiler::WhileLoopStatement
Definition
AST.hpp:990
Sources
CeresEngine
Material
ShaderCompiler
AST
Visitor
Optimizer.hpp
Generated by
1.9.8