Shader/ShaderLang: Add support for Unary operators
This commit is contained in:
@@ -802,10 +802,10 @@ namespace Nz::ShaderLang
|
||||
{
|
||||
return ParseBinOpRhs(0, ParsePrimaryExpression());
|
||||
}
|
||||
|
||||
|
||||
ShaderAst::ExpressionPtr Parser::ParseFloatingPointExpression()
|
||||
{
|
||||
const Token& floatingPointToken = Expect(Advance(), TokenType::FloatingPointValue);
|
||||
const Token& floatingPointToken = Expect(Advance(), TokenType::FloatingPointValue);
|
||||
return ShaderBuilder::Constant(float(std::get<double>(floatingPointToken.data))); //< FIXME
|
||||
}
|
||||
|
||||
@@ -816,10 +816,10 @@ namespace Nz::ShaderLang
|
||||
|
||||
return ShaderBuilder::Identifier(identifier);
|
||||
}
|
||||
|
||||
|
||||
ShaderAst::ExpressionPtr Parser::ParseIntegerExpression()
|
||||
{
|
||||
const Token& integerToken = Expect(Advance(), TokenType::IntegerValue);
|
||||
const Token& integerToken = Expect(Advance(), TokenType::IntegerValue);
|
||||
return ShaderBuilder::Constant(static_cast<Nz::Int32>(std::get<long long>(integerToken.data))); //< FIXME
|
||||
}
|
||||
|
||||
@@ -894,21 +894,20 @@ namespace Nz::ShaderLang
|
||||
case TokenType::IntegerValue:
|
||||
return ParseIntegerExpression();
|
||||
|
||||
case TokenType::Minus:
|
||||
//< FIXME: Handle this with an unary node
|
||||
if (Peek(1).type == TokenType::FloatingPointValue)
|
||||
{
|
||||
Consume();
|
||||
return ParseFloatingPointExpression(true);
|
||||
}
|
||||
else if (Peek(1).type == TokenType::IntegerValue)
|
||||
{
|
||||
Consume();
|
||||
return ParseIntegerExpression(true);
|
||||
}
|
||||
else
|
||||
case TokenType::Minus:
|
||||
{
|
||||
Consume();
|
||||
ShaderAst::ExpressionPtr expr = ParsePrimaryExpression();
|
||||
|
||||
|
||||
return ShaderBuilder::Unary(ShaderAst::UnaryType::Minus, std::move(expr));
|
||||
}
|
||||
|
||||
case TokenType::Plus:
|
||||
{
|
||||
Consume();
|
||||
ShaderAst::ExpressionPtr expr = ParsePrimaryExpression();
|
||||
|
||||
return ShaderBuilder::Unary(ShaderAst::UnaryType::Plus, std::move(expr));
|
||||
}
|
||||
|
||||
case TokenType::OpenParenthesis:
|
||||
|
||||
Reference in New Issue
Block a user