Shader: Add missing ! and != parsing

This commit is contained in:
Jérôme Leclercq 2021-08-02 11:12:56 +02:00
parent a5b71f33b9
commit ac08afe9f1
3 changed files with 24 additions and 0 deletions

View File

@ -42,6 +42,7 @@ NAZARA_SHADERLANG_TOKEN(LogicalAnd)
NAZARA_SHADERLANG_TOKEN(LogicalOr)
NAZARA_SHADERLANG_TOKEN(Multiply)
NAZARA_SHADERLANG_TOKEN(Minus)
NAZARA_SHADERLANG_TOKEN(Not)
NAZARA_SHADERLANG_TOKEN(NotEqual)
NAZARA_SHADERLANG_TOKEN(Plus)
NAZARA_SHADERLANG_TOKEN(OpenCurlyBracket)

View File

@ -303,6 +303,21 @@ namespace Nz::ShaderLang
break;
}
case '!':
{
char next = Peek();
if (next == '=')
{
currentPos++;
tokenType = TokenType::NotEqual;
}
else
tokenType = TokenType::Not;
break;
}
case '+': tokenType = TokenType::Plus; break;
case '*': tokenType = TokenType::Multiply; break;
case ':': tokenType = TokenType::Colon; break;

View File

@ -1117,6 +1117,14 @@ namespace Nz::ShaderLang
return ShaderBuilder::Unary(ShaderAst::UnaryType::Plus, std::move(expr));
}
case TokenType::Not:
{
Consume();
ShaderAst::ExpressionPtr expr = ParsePrimaryExpression();
return ShaderBuilder::Unary(ShaderAst::UnaryType::LogicalNot, std::move(expr));
}
case TokenType::OpenParenthesis:
return ParseParenthesisExpression();