Fix hex literals in foreach loops

This commit is contained in:
Hackerpilot 2014-04-21 15:25:45 -07:00
parent 3ddac7885f
commit 06cf70b34c
1 changed files with 17 additions and 4 deletions

View File

@ -64,24 +64,37 @@ class BackwardsRangeCheck : BaseAnalyzer
override void visit(const PrimaryExpression primary)
{
import std.conv;
import std.string;
if (state == State.ignore || !isNumberLiteral(primary.primary.type))
return;
if (state == State.left)
{
line = primary.primary.line;
this.column = primary.primary.column;
left = to!long(primary.primary.text.removechars("_uUlL"));
left = parseNumber(primary.primary.text);
hasLeft = true;
}
else
{
right = to!long(primary.primary.text.removechars("_uUlL"));
right = parseNumber(primary.primary.text);
hasRight = true;
}
}
long parseNumber(string te)
{
import std.conv;
import std.string;
string t = te.removechars("_uUlL");
if (t.length > 2)
{
if (t[1] == 'x' || t[1] == 'X')
return to!long(t[2..$], 16);
if (t[1] == 'b' || t[1] == 'B')
return to!long(t[2..$], 2);
}
return to!long(t);
}
override void visit(const SliceExpression sliceExpression)
{
if (sliceExpression.lower !is null && sliceExpression.upper !is null)