Use switch statement for operator tokenization.

This commit is contained in:
atlimit8
2017-02-11 23:42:22 -06:00
parent 73895d07e2
commit c70442b15e

View File

@@ -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]))
{ {