Use switch statement for operator tokenization.
This commit is contained in:
@@ -166,53 +166,57 @@ namespace OpenRA.Support
|
|||||||
static Token ParseSymbol(string expression, ref int i)
|
static Token ParseSymbol(string expression, ref int i)
|
||||||
{
|
{
|
||||||
var start = i;
|
var start = i;
|
||||||
var c = expression[start];
|
|
||||||
|
|
||||||
// Parse operators
|
// Parse operators
|
||||||
if (c == '!')
|
switch (expression[start])
|
||||||
{
|
{
|
||||||
if (i < expression.Length - 1 && expression[start + 1] == '=')
|
case '!':
|
||||||
{
|
{
|
||||||
i++;
|
if (i < expression.Length - 1 && expression[start + 1] == '=')
|
||||||
return new NotEqualsToken(start);
|
{
|
||||||
|
i++;
|
||||||
|
return new NotEqualsToken(start);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new NotToken(start);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new NotToken(start);
|
case '=':
|
||||||
}
|
|
||||||
|
|
||||||
if (c == '=')
|
|
||||||
{
|
|
||||||
if (i < expression.Length - 1 && expression[start + 1] == '=')
|
|
||||||
{
|
{
|
||||||
i++;
|
if (i < expression.Length - 1 && expression[start + 1] == '=')
|
||||||
return new EqualsToken(start);
|
{
|
||||||
|
i++;
|
||||||
|
return new EqualsToken(start);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidDataException("Unexpected character '=' at index {0}".F(start));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new InvalidDataException("Unexpected character '=' at index {0}".F(start));
|
case '&':
|
||||||
}
|
|
||||||
|
|
||||||
if (c == '&')
|
|
||||||
{
|
|
||||||
if (i < expression.Length - 1 && expression[start + 1] == '&')
|
|
||||||
{
|
{
|
||||||
i++;
|
if (i < expression.Length - 1 && expression[start + 1] == '&')
|
||||||
return new AndToken(start);
|
{
|
||||||
|
i++;
|
||||||
|
return new AndToken(start);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidDataException("Unexpected character '&' at index {0}".F(start));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new InvalidDataException("Unexpected character '&' at index {0}".F(start));
|
case '|':
|
||||||
}
|
|
||||||
|
|
||||||
if (c == '|')
|
|
||||||
{
|
|
||||||
if (i < expression.Length - 1 && expression[start + 1] == '|')
|
|
||||||
{
|
{
|
||||||
i++;
|
if (i < expression.Length - 1 && expression[start + 1] == '|')
|
||||||
return new OrToken(start);
|
{
|
||||||
}
|
i++;
|
||||||
|
return new OrToken(start);
|
||||||
|
}
|
||||||
|
|
||||||
throw new InvalidDataException("Unexpected character '|' at index {0}".F(start));
|
throw new InvalidDataException("Unexpected character '|' at index {0}".F(start));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var c = expression[start];
|
||||||
|
|
||||||
// Scan forwards until we find an non-digit character
|
// Scan forwards until we find an non-digit character
|
||||||
if (c == '-' || char.IsDigit(expression[i]))
|
if (c == '-' || char.IsDigit(expression[i]))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user