From 997373a069084f9def682db5340d3170919a327d Mon Sep 17 00:00:00 2001 From: Hackerpilot Date: Sat, 8 Mar 2014 22:22:52 -0800 Subject: [PATCH] Fix #146 --- stdx/d/lexer.d | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/stdx/d/lexer.d b/stdx/d/lexer.d index 31b15d7..23bca67 100644 --- a/stdx/d/lexer.d +++ b/stdx/d/lexer.d @@ -619,13 +619,33 @@ public struct DLexer lexExponent(type); break hexLoop; case '.': - if (foundDot) + if (foundDot || !range.canPeek(1) || range.peekAt(1) == '.') break hexLoop; - if (range.peek(1).length && range.peek(1)[0] == '.') - break hexLoop; - range.popFront(); - foundDot = true; - type = tok!"doubleLiteral"; + else + { + // The following bit of silliness tries to tell the + // difference between "int dot identifier" and + // "double identifier". + if (range.canPeek(1)) + { + switch (range.peekAt(1)) + { + case '0': .. case '9': + case 'A': .. case 'F': + case 'a': .. case 'f': + goto doubleLiteral; + default: + break hexLoop; + } + } + else + { + doubleLiteral: + range.popFront(); + foundDot = true; + type = tok!"doubleLiteral"; + } + } break; default: break hexLoop;