From 06cf70b34c1a9da687a09b965c3aab2d7dedcbda Mon Sep 17 00:00:00 2001 From: Hackerpilot Date: Mon, 21 Apr 2014 15:25:45 -0700 Subject: [PATCH] Fix hex literals in foreach loops --- analysis/range.d | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/analysis/range.d b/analysis/range.d index a9e911c..ccce2e6 100644 --- a/analysis/range.d +++ b/analysis/range.d @@ -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)