Shader/NZSL: Add support for array indexing

This commit is contained in:
Jérôme Leclercq
2021-06-01 16:22:41 +02:00
parent 0f3c0abb96
commit 4465e230af
17 changed files with 1139 additions and 976 deletions

View File

@@ -70,7 +70,7 @@ namespace Nz::ShaderAst
void Visit(AstExpressionVisitor& visitor) override;
ExpressionPtr expr;
std::vector<std::string> memberIdentifiers;
std::vector<std::string> identifiers;
};
struct NAZARA_SHADER_API AccessIndexExpression : public Expression
@@ -79,7 +79,7 @@ namespace Nz::ShaderAst
void Visit(AstExpressionVisitor& visitor) override;
ExpressionPtr expr;
std::vector<std::size_t> memberIndices;
std::vector<ExpressionPtr> indices;
};
struct NAZARA_SHADER_API AssignExpression : public Expression

View File

@@ -43,11 +43,10 @@ namespace Nz::ShaderAst
struct FunctionData;
struct Identifier;
const ExpressionType& CheckField(const ExpressionType& structType, const std::string* memberIdentifier, std::size_t remainingMembers, std::size_t* structIndices);
using AstCloner::CloneExpression;
ExpressionPtr Clone(AccessIdentifierExpression& node) override;
ExpressionPtr Clone(AccessIndexExpression& node) override;
ExpressionPtr Clone(AssignExpression& node) override;
ExpressionPtr Clone(BinaryExpression& node) override;
ExpressionPtr Clone(CallFunctionExpression& node) override;
@@ -101,6 +100,7 @@ namespace Nz::ShaderAst
void SanitizeIdentifier(std::string& identifier);
void Validate(AccessIndexExpression& node);
void Validate(CallFunctionExpression& node, const DeclareFunctionStatement* referenceDeclaration);
void Validate(IntrinsicExpression& node);