Document assumptions that NumericLiteralParser makes with an assertion.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56876 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-09-30 20:45:40 +00:00
Родитель 079f2c467d
Коммит c29bbde0a1
1 изменённых файлов: 10 добавлений и 1 удалений

Просмотреть файл

@ -86,7 +86,8 @@ static unsigned ProcessCharEscape(const char *&ThisTokBuf,
for (; ThisTokBuf != ThisTokEnd; ++ThisTokBuf) {
int CharVal = HexDigitValue(ThisTokBuf[0]);
if (CharVal == -1) break;
Overflow |= (ResultChar & 0xF0000000) ? true : false; // About to shift out a digit?
// About to shift out a digit?
Overflow |= (ResultChar & 0xF0000000) ? true : false;
ResultChar <<= 4;
ResultChar |= CharVal;
}
@ -196,6 +197,14 @@ NumericLiteralParser::
NumericLiteralParser(const char *begin, const char *end,
SourceLocation TokLoc, Preprocessor &pp)
: PP(pp), ThisTokBegin(begin), ThisTokEnd(end) {
// This routine assumes that the range begin/end matches the regex for integer
// and FP constants (specifically, the 'pp-number' regex), and assumes that
// the byte at "*end" is both valid and not part of the regex. Because of
// this, it doesn't have to check for 'overscan' in various places.
assert(!isalnum(*end) && *end != '.' && *end != '_' &&
"Lexer didn't maximally munch?");
s = DigitsBegin = begin;
saw_exponent = false;
saw_period = false;