add a new Lexer::SkipEscapedNewLines method.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69483 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-04-18 22:27:02 +00:00
Родитель 24f0e48c0a
Коммит 033749571f
2 изменённых файлов: 27 добавлений и 0 удалений

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

@ -342,6 +342,10 @@ public:
/// to this function.
static unsigned getEscapedNewLineSize(const char *P);
/// SkipEscapedNewLines - If P points to an escaped newline (or a series of
/// them), skip over them and return the first non-escaped-newline found,
/// otherwise return P.
static const char *SkipEscapedNewLines(const char *P);
private:
/// getCharAndSizeSlowNoWarn - Same as getCharAndSizeSlow, but never emits a

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

@ -422,6 +422,29 @@ unsigned Lexer::getEscapedNewLineSize(const char *Ptr) {
return 0;
}
/// SkipEscapedNewLines - If P points to an escaped newline (or a series of
/// them), skip over them and return the first non-escaped-newline found,
/// otherwise return P.
const char *Lexer::SkipEscapedNewLines(const char *P) {
while (1) {
const char *AfterEscape;
if (*P == '\\') {
AfterEscape = P+1;
} else if (*P == '?') {
// If not a trigraph for escape, bail out.
if (P[1] != '?' || P[2] != '/')
return P;
AfterEscape = P+3;
} else {
return P;
}
unsigned NewLineSize = Lexer::getEscapedNewLineSize(AfterEscape);
if (NewLineSize == 0) return P;
P = AfterEscape+NewLineSize;
}
}
/// getCharAndSizeSlow - Peek a single 'character' from the specified buffer,
/// get its size, and return it. This is tricky in several cases: