Fix compilation

This commit is contained in:
Jérôme Leclercq 2022-03-15 09:12:55 +01:00
parent 79a5716110
commit 0f55779a8a
2 changed files with 8 additions and 27 deletions

View File

@ -11,24 +11,11 @@ namespace Nz::ShaderAst
{ {
namespace namespace
{ {
template<typename T> const T& Retrieve(const std::unordered_map<std::size_t, T>& map, std::size_t id)
{
auto it = map.find(id);
assert(it != map.end());
return it->second;
}
template<typename T, typename U> void UniqueInsert(std::unordered_map<T, U>& map, T key, U value) template<typename T, typename U> void UniqueInsert(std::unordered_map<T, U>& map, T key, U value)
{ {
assert(map.find(key) == map.end()); assert(map.find(key) == map.end());
map.emplace(std::move(key), std::move(value)); map.emplace(std::move(key), std::move(value));
} }
template<typename T, typename U>
std::unique_ptr<T> static_unique_pointer_cast(std::unique_ptr<U>&& ptr)
{
return std::unique_ptr<T>(SafeCast<T*>(ptr.release()));
}
} }
struct IndexRemapperVisitor::Context struct IndexRemapperVisitor::Context
@ -57,7 +44,7 @@ namespace Nz::ShaderAst
StatementPtr IndexRemapperVisitor::Clone(DeclareConstStatement& node) StatementPtr IndexRemapperVisitor::Clone(DeclareConstStatement& node)
{ {
DeclareConstStatementPtr clone = static_unique_pointer_cast<DeclareConstStatement>(AstCloner::Clone(node)); DeclareConstStatementPtr clone = StaticUniquePointerCast<DeclareConstStatement>(AstCloner::Clone(node));
assert(clone->constIndex); assert(clone->constIndex);
std::size_t newConstIndex = m_context->callbacks->constIndexGenerator(*clone->constIndex); std::size_t newConstIndex = m_context->callbacks->constIndexGenerator(*clone->constIndex);
@ -69,7 +56,7 @@ namespace Nz::ShaderAst
StatementPtr IndexRemapperVisitor::Clone(DeclareExternalStatement& node) StatementPtr IndexRemapperVisitor::Clone(DeclareExternalStatement& node)
{ {
DeclareExternalStatementPtr clone = static_unique_pointer_cast<DeclareExternalStatement>(AstCloner::Clone(node)); DeclareExternalStatementPtr clone = StaticUniquePointerCast<DeclareExternalStatement>(AstCloner::Clone(node));
for (auto& extVar : clone->externalVars) for (auto& extVar : clone->externalVars)
{ {
@ -84,7 +71,7 @@ namespace Nz::ShaderAst
StatementPtr IndexRemapperVisitor::Clone(DeclareFunctionStatement& node) StatementPtr IndexRemapperVisitor::Clone(DeclareFunctionStatement& node)
{ {
DeclareFunctionStatementPtr clone = static_unique_pointer_cast<DeclareFunctionStatement>(AstCloner::Clone(node)); DeclareFunctionStatementPtr clone = StaticUniquePointerCast<DeclareFunctionStatement>(AstCloner::Clone(node));
assert(clone->funcIndex); assert(clone->funcIndex);
std::size_t newFuncIndex = m_context->callbacks->funcIndexGenerator(*clone->funcIndex); std::size_t newFuncIndex = m_context->callbacks->funcIndexGenerator(*clone->funcIndex);
@ -110,7 +97,7 @@ namespace Nz::ShaderAst
StatementPtr IndexRemapperVisitor::Clone(DeclareStructStatement& node) StatementPtr IndexRemapperVisitor::Clone(DeclareStructStatement& node)
{ {
DeclareStructStatementPtr clone = static_unique_pointer_cast<DeclareStructStatement>(AstCloner::Clone(node)); DeclareStructStatementPtr clone = StaticUniquePointerCast<DeclareStructStatement>(AstCloner::Clone(node));
assert(clone->structIndex); assert(clone->structIndex);
std::size_t newStructIndex = m_context->callbacks->structIndexGenerator(*clone->structIndex); std::size_t newStructIndex = m_context->callbacks->structIndexGenerator(*clone->structIndex);
@ -125,7 +112,7 @@ namespace Nz::ShaderAst
StatementPtr IndexRemapperVisitor::Clone(DeclareVariableStatement& node) StatementPtr IndexRemapperVisitor::Clone(DeclareVariableStatement& node)
{ {
DeclareVariableStatementPtr clone = static_unique_pointer_cast<DeclareVariableStatement>(AstCloner::Clone(node)); DeclareVariableStatementPtr clone = StaticUniquePointerCast<DeclareVariableStatement>(AstCloner::Clone(node));
assert(clone->varIndex); assert(clone->varIndex);
std::size_t newVarIndex = m_context->callbacks->varIndexGenerator(*clone->varIndex); std::size_t newVarIndex = m_context->callbacks->varIndexGenerator(*clone->varIndex);
@ -139,7 +126,7 @@ namespace Nz::ShaderAst
ExpressionPtr IndexRemapperVisitor::Clone(FunctionExpression& node) ExpressionPtr IndexRemapperVisitor::Clone(FunctionExpression& node)
{ {
FunctionExpressionPtr clone = static_unique_pointer_cast<FunctionExpression>(AstCloner::Clone(node)); FunctionExpressionPtr clone = StaticUniquePointerCast<FunctionExpression>(AstCloner::Clone(node));
assert(clone->funcId); assert(clone->funcId);
clone->funcId = Retrieve(m_context->newFuncIndices, clone->funcId); clone->funcId = Retrieve(m_context->newFuncIndices, clone->funcId);
@ -149,7 +136,7 @@ namespace Nz::ShaderAst
ExpressionPtr IndexRemapperVisitor::Clone(StructTypeExpression& node) ExpressionPtr IndexRemapperVisitor::Clone(StructTypeExpression& node)
{ {
StructTypeExpressionPtr clone = static_unique_pointer_cast<StructTypeExpression>(AstCloner::Clone(node)); StructTypeExpressionPtr clone = StaticUniquePointerCast<StructTypeExpression>(AstCloner::Clone(node));
assert(clone->structTypeId); assert(clone->structTypeId);
clone->structTypeId = Retrieve(m_context->newStructIndices, clone->structTypeId); clone->structTypeId = Retrieve(m_context->newStructIndices, clone->structTypeId);
@ -159,7 +146,7 @@ namespace Nz::ShaderAst
ExpressionPtr IndexRemapperVisitor::Clone(VariableValueExpression& node) ExpressionPtr IndexRemapperVisitor::Clone(VariableValueExpression& node)
{ {
VariableValueExpressionPtr clone = static_unique_pointer_cast<VariableValueExpression>(AstCloner::Clone(node)); VariableValueExpressionPtr clone = StaticUniquePointerCast<VariableValueExpression>(AstCloner::Clone(node));
assert(clone->variableId); assert(clone->variableId);
clone->variableId = Retrieve(m_context->newVarIndices, clone->variableId); clone->variableId = Retrieve(m_context->newVarIndices, clone->variableId);

View File

@ -9,12 +9,6 @@
#include <catch2/catch.hpp> #include <catch2/catch.hpp>
#include <cctype> #include <cctype>
template<typename T, typename U>
std::unique_ptr<T> static_unique_pointer_cast(std::unique_ptr<U>&& ptr)
{
return std::unique_ptr<T>(Nz::SafeCast<T*>(ptr.release()));
}
void PropagateConstantAndExpect(std::string_view sourceCode, std::string_view expectedOptimizedResult) void PropagateConstantAndExpect(std::string_view sourceCode, std::string_view expectedOptimizedResult)
{ {
Nz::ShaderAst::ModulePtr shaderModule; Nz::ShaderAst::ModulePtr shaderModule;