Shader: Add support for compound operators

This commit is contained in:
Jérôme Leclercq
2021-09-24 15:39:03 +02:00
parent 601ed047ba
commit 0442db1c53
15 changed files with 350 additions and 234 deletions

View File

@@ -106,14 +106,21 @@ namespace Nz::ShaderLang
case '-':
{
if (Peek() == '>')
char next = Peek();
if (next == '>')
{
currentPos++;
tokenType = TokenType::FunctionReturn;
break;
}
else if (next == '=')
{
currentPos++;
tokenType = TokenType::MinusAssign;
}
else
tokenType = TokenType::Minus;
tokenType = TokenType::Minus;
break;
}
@@ -155,6 +162,11 @@ namespace Nz::ShaderLang
}
while (next != -1);
}
else if (next == '=')
{
currentPos++;
tokenType = TokenType::DivideAssign;
}
else
tokenType = TokenType::Divide;
@@ -253,7 +265,14 @@ namespace Nz::ShaderLang
if (next == '|')
{
currentPos++;
tokenType = TokenType::LogicalOr;
next = Peek();
if (next == '=')
{
currentPos++;
tokenType = TokenType::LogicalOrAssign;
}
else
tokenType = TokenType::LogicalOr;
}
else
throw UnrecognizedToken{}; //< TODO: Add BOR (a | b)
@@ -267,7 +286,14 @@ namespace Nz::ShaderLang
if (next == '&')
{
currentPos++;
tokenType = TokenType::LogicalAnd;
next = Peek();
if (next == '=')
{
currentPos++;
tokenType = TokenType::LogicalAndAssign;
}
else
tokenType = TokenType::LogicalAnd;
}
else
throw UnrecognizedToken{}; //< TODO: Add BAND (a & b)
@@ -317,9 +343,34 @@ namespace Nz::ShaderLang
break;
}
case '+':
{
char next = Peek();
if (next == '=')
{
currentPos++;
tokenType = TokenType::PlusAssign;
}
else
tokenType = TokenType::Plus;
break;
}
case '*':
{
char next = Peek();
if (next == '=')
{
currentPos++;
tokenType = TokenType::MultiplyAssign;
}
else
tokenType = TokenType::Multiply;
break;
}
case '+': tokenType = TokenType::Plus; break;
case '*': tokenType = TokenType::Multiply; break;
case ':': tokenType = TokenType::Colon; break;
case ';': tokenType = TokenType::Semicolon; break;
case '.': tokenType = TokenType::Dot; break;