CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
ASTFactory.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 "AST.hpp"
11#include "TypeDenoter.hpp"
12
14
16
17 class Variant;
18
19 namespace ASTFactory {
20 [[nodiscard]] CallExpressionPtr makeIntrinsicCallExpression(const Intrinsic intrinsic, const String& ident, const TypeDenoterPtr& typeDenoter, const Vector<ExpressionPtr>& arguments);
21
23
24 // Makes a call expression to a wrapper function.
26
28
29 // Makes a type constructor function call.
31
34
35 [[nodiscard]] BinaryExpressionPtr makeBinaryExpression(const ExpressionPtr& lhsExpression, const BinaryOp op, const ExpressionPtr& rhsExpression);
36
37 // Makes a new LiteralExpression of the specified data type and literal value.
39
40 // Makes a new LiteralExpression if the specified variant is either a boolean, integral, or real type. Otherwise, null is returned.
42
44
48
49 [[nodiscard]] VarDeclarationStatementPtr makeVarDeclarationStatement(const TypeSpecifierPtr& typeSpecifier, const String& ident, const ExpressionPtr& initializer = nullptr);
50 [[nodiscard]] VarDeclarationStatementPtr makeVarDeclarationStatement(const DataType dataType, const String& ident, const ExpressionPtr& initializer = nullptr);
51
52 // Returns a new VarDeclStatement with the specified VarDecl index and removes the specified VarDecl from the input statement, except there is only one VarDecl.
54
55 [[nodiscard]] ObjectExpressionPtr makeObjectExpression(const ExpressionPtr& prefixExpression, const String& ident, Declaration* symbolRef = nullptr);
56 [[nodiscard]] ObjectExpressionPtr makeObjectExpression(const String& ident, Declaration* symbolRef = nullptr);
58
60 [[nodiscard]] ArrayExpressionPtr makeArrayExpression(const ExpressionPtr& prefixExpression, const Vector<int>& arrayIndices);
63
69
71
72 // Makes a new bracket expression with the specified sub expression (source area is copied).
74
75 // Return a list expression (or only the input expression) for the specified literal expression, so it can be used as constructor for a struct.
77
78 // Makes an expression statement with an assignment expression.
79 [[nodiscard]] ExpressionStatementPtr makeAssignStatement(const ExpressionPtr& lvalueExpression, const ExpressionPtr& rvalueExpression, const AssignOp op = AssignOp::Set);
80
81 // Makes an expression statement with an array element assignment for the specified variable, array indices, and assignment expression.
83
85
86 // Makes a code block statement with initial code block and the specified statement inserted.
88
90
91 // Makes a uniform buffer declaration with the specified identifier.
94
95 // -----------------------------------------------------------------------------------------
96
99
100 // -----------------------------------------------------------------------------------------
101
105
106 } // namespace ASTFactory
107
108} // namespace CeresEngine::ShaderCompiler
Definition Variant.hpp:20
ExpressionStatementPtr makeAssignStatement(const ExpressionPtr &lvalueExpression, const ExpressionPtr &rvalueExpression, const AssignOp op=AssignOp::Set)
ArrayExpressionPtr makeArrayExpression(const ExpressionPtr &prefixExpression, Vector< ExpressionPtr > &&arrayIndices)
ExpressionPtr convertExpressionBaseType(const DataType dataType, const ExpressionPtr &subExpression)
CastExpressionPtr makeLiteralCastExpression(const TypeDenoterPtr &typeDenoter, const DataType literalType, const String &literalValue)
ArrayDimensionPtr makeArrayDimension(int arraySize)
UniformBufferDeclarationPtr makeUniformBufferDeclaration(const String &ident, Int32 bindingSlot=0, const UniformBufferType bufferType=UniformBufferType::ConstantBuffer)
BinaryExpressionPtr makeBinaryExpression(const ExpressionPtr &lhsExpression, const BinaryOp op, const ExpressionPtr &rhsExpression)
TypeSpecifierPtr makeTypeSpecifier(const StructDeclarationPtr &structDeclaration)
ArrayDimensionPtr convertExpressionToArrayDimension(const ExpressionPtr &expression)
BasicDeclarationStatementPtr makeStructDeclarationStatement(const StructDeclarationPtr &structDeclaration)
ExpressionStatementPtr makeArrayAssignStatement(VarDeclaration *varDeclaration, const Vector< int > &arrayIndices, const ExpressionPtr &assignExpression)
CallExpressionPtr makeTextureSamplerBindingCallExpression(const ExpressionPtr &textureObjectExpression, const ExpressionPtr &samplerObjectExpression)
CallExpressionPtr makeTypeCtorCallExpression(const TypeDenoterPtr &typeDenoter, const Vector< ExpressionPtr > &arguments)
ExpressionPtr makeConstructorListExpression(const ExpressionPtr &expression, const Vector< TypeDenoterPtr > &listTypeDens)
BracketExpressionPtr makeBracketExpression(const ExpressionPtr &expression)
Vector< ArrayDimensionPtr > convertExpressionListToArrayDimensionList(const Vector< ExpressionPtr > &expressions)
CallExpressionPtr makeIntrinsicCallExpression(const Intrinsic intrinsic, const String &ident, const TypeDenoterPtr &typeDenoter, const Vector< ExpressionPtr > &arguments)
ArrayExpressionPtr makeArrayExpressionSplit(const ArrayExpressionPtr &arrayExpression, std::size_t splitArrayIndex)
Splits the specified array expression at the specified array index location.
RegisterPtr makeRegister(Int32 set, Int32 slot, const RegisterType registerType=RegisterType::Undefined)
Vector< ArrayDimensionPtr > makeArrayDimensionList(const Vector< int > &arraySizes)
CallExpressionPtr makeWrapperCallExpression(const String &funcIdent, const TypeDenoterPtr &typeDenoter, const Vector< ExpressionPtr > &arguments)
CodeBlockStatementPtr makeCodeBlockStatement(const StatementPtr &statement)
LiteralExpressionPtr makeLiteralExpressionOrNull(const Variant &literalValue)
LiteralExpressionPtr makeLiteralExpression(const DataType literalType, const String &literalValue)
VarDeclarationStatementPtr makeVarDeclarationStatementSplit(const VarDeclarationStatementPtr &varDeclarationStatement, std::size_t idx)
VarDeclarationStatementPtr makeVarDeclarationStatement(const TypeSpecifierPtr &typeSpecifier, const String &ident, const ExpressionPtr &initializer=nullptr)
CastExpressionPtr makeCastExpression(const TypeDenoterPtr &typeDenoter, const ExpressionPtr &valueExpression)
InitializerExpressionPtr makeInitializerExpression(const Vector< ExpressionPtr > &expressions)
Vector< ExpressionPtr > makeArrayIndices(const Vector< int > &arrayIndices)
AliasDeclarationStatementPtr makeBaseTypeAlias(const DataType dataType, const String &ident)
ObjectExpressionPtr makeObjectExpression(const ExpressionPtr &prefixExpression, const String &ident, Declaration *symbolRef=nullptr)
Definition AST.hpp:33
SPtr< BinaryExpression > BinaryExpressionPtr
Definition Visitor.hpp:71
SPtr< TypeSpecifier > TypeSpecifierPtr
Definition Visitor.hpp:37
SPtr< LiteralExpression > LiteralExpressionPtr
Definition Visitor.hpp:68
SPtr< AliasDeclarationStatement > AliasDeclarationStatementPtr
Definition Visitor.hpp:50
SPtr< Expression > ExpressionPtr
Definition Visitor.hpp:26
SPtr< ObjectExpression > ObjectExpressionPtr
Definition Visitor.hpp:76
SPtr< ArrayDimension > ArrayDimensionPtr
Definition Visitor.hpp:36
SPtr< InitializerExpression > InitializerExpressionPtr
Definition Visitor.hpp:80
SPtr< ArrayExpression > ArrayExpressionPtr
Definition Visitor.hpp:78
SPtr< StructDeclaration > StructDeclarationPtr
Definition Visitor.hpp:42
BinaryOp
Definition ASTEnums.hpp:58
RegisterType
Definition ASTEnums.hpp:741
SPtr< CodeBlockStatement > CodeBlockStatementPtr
Definition Visitor.hpp:54
SPtr< Statement > StatementPtr
Definition Visitor.hpp:25
Intrinsic
Intrinsics function enumeration (currently only HLSL intrinsics).
Definition ASTEnums.hpp:980
SPtr< CallExpression > CallExpressionPtr
Definition Visitor.hpp:74
SPtr< TypeDenoter > TypeDenoterPtr
Definition TypeDenoter.hpp:29
UniformBufferType
Definition ASTEnums.hpp:482
DataType
Definition ASTEnums.hpp:159
SPtr< BracketExpression > BracketExpressionPtr
Definition Visitor.hpp:75
SPtr< ExpressionStatement > ExpressionStatementPtr
Definition Visitor.hpp:61
SPtr< VarDeclarationStatement > VarDeclarationStatementPtr
Definition Visitor.hpp:49
SPtr< UniformBufferDeclaration > UniformBufferDeclarationPtr
Definition Visitor.hpp:45
AssignOp
Definition ASTEnums.hpp:24
SPtr< BasicDeclarationStatement > BasicDeclarationStatementPtr
Definition Visitor.hpp:51
SPtr< Register > RegisterPtr
Definition Visitor.hpp:34
SPtr< CastExpression > CastExpressionPtr
Definition Visitor.hpp:79
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
std::int32_t Int32
Definition DataTypes.hpp:21
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25