Change SkipBlockComment and SkipBCPLComment to return true when in

keep comment mode, instead of returning false.  This matches SkipWhitespace.

llvm-svn: 57402
This commit is contained in:
Chris Lattner 2008-10-12 04:15:42 +00:00
parent 4d96344c19
commit e01e758e11
1 changed files with 22 additions and 18 deletions

View File

@ -751,7 +751,8 @@ bool Lexer::SkipWhitespace(Token &Result, const char *CurPtr) {
// SkipBCPLComment - We have just read the // characters from input. Skip until
// we find the newline character thats terminate the comment. Then update
/// BufferPtr and return.
/// BufferPtr and return. If we're in KeepCommentMode, this will form the token
/// and return true.
bool Lexer::SkipBCPLComment(Token &Result, const char *CurPtr) {
// If BCPL comments aren't explicitly enabled for this language, emit an
// extension warning.
@ -823,7 +824,7 @@ bool Lexer::SkipBCPLComment(Token &Result, const char *CurPtr) {
// return immediately, so that the lexer can return this as an EOM token.
if (ParsingPreprocessorDirective || CurPtr == BufferEnd) {
BufferPtr = CurPtr;
return true;
return false;
}
// Otherwise, eat the \n character. We don't care if this is a \n\r or
@ -838,7 +839,7 @@ bool Lexer::SkipBCPLComment(Token &Result, const char *CurPtr) {
// No leading whitespace seen so far.
Result.clearFlag(Token::LeadingSpace);
BufferPtr = CurPtr;
return true;
return false;
}
/// SaveBCPLComment - If in save-comment mode, package up this BCPL comment in
@ -864,7 +865,7 @@ bool Lexer::SaveBCPLComment(Token &Result, const char *CurPtr) {
Result.getLocation()));
Result.setLength(Spelling.size());
}
return false;
return true;
}
/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline
@ -937,6 +938,9 @@ static bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr,
/// because they cannot cause the comment to end. The only thing that can
/// happen is the comment could end with an escaped newline between the */ end
/// of comment.
///
/// If KeepCommentMode is enabled, this forms a token from the comment and
/// returns true.
bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr) {
// Scan one character past where we should, looking for a '/' character. Once
// we find it, check to see if it was preceeded by a *. This common
@ -953,7 +957,7 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr) {
if (!LexingRawMode)
Diag(BufferPtr, diag::err_unterminated_block_comment);
BufferPtr = CurPtr-1;
return true;
return false;
}
// Check to see if the first character after the '/*' is another /. If so,
@ -1028,7 +1032,7 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr) {
// after the /*, but this would involve lexing a lot of what really is the
// comment, which surely would confuse the parser.
BufferPtr = CurPtr-1;
return true;
return false;
}
C = *CurPtr++;
}
@ -1037,7 +1041,7 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr) {
if (inKeepCommentMode()) {
Result.setKind(tok::comment);
FormTokenWithChars(Result, CurPtr);
return false;
return true;
}
// It is common for the tokens immediately after a /**/ comment to be
@ -1047,13 +1051,13 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr) {
if (isHorizontalWhitespace(*CurPtr)) {
Result.setFlag(Token::LeadingSpace);
SkipWhitespace(Result, CurPtr+1);
return true;
return false;
}
// Otherwise, just return so that the next character will be lexed as a token.
BufferPtr = CurPtr;
Result.setFlag(Token::LeadingSpace);
return true;
return false;
}
//===----------------------------------------------------------------------===//
@ -1477,17 +1481,17 @@ LexNextToken:
// 6.4.9: Comments
Char = getCharAndSize(CurPtr, SizeTmp);
if (Char == '/') { // BCPL comment.
if (SkipBCPLComment(Result, ConsumeChar(CurPtr, SizeTmp, Result))) {
// It is common for the tokens immediately after a // comment to be
// whitespace (indentation for the next line). Instead of going through
// the big switch, handle it efficiently now.
goto SkipIgnoredUnits;
}
return; // KeepCommentMode
if (SkipBCPLComment(Result, ConsumeChar(CurPtr, SizeTmp, Result)))
return; // KeepCommentMode
// It is common for the tokens immediately after a // comment to be
// whitespace (indentation for the next line). Instead of going through
// the big switch, handle it efficiently now.
goto SkipIgnoredUnits;
} else if (Char == '*') { // /**/ comment.
if (SkipBlockComment(Result, ConsumeChar(CurPtr, SizeTmp, Result)))
goto LexNextToken; // GCC isn't tail call eliminating.
return; // KeepCommentMode
return; // KeepCommentMode
goto LexNextToken; // GCC isn't tail call eliminating.
} else if (Char == '=') {
Result.setKind(tok::slashequal);
CurPtr = ConsumeChar(CurPtr, SizeTmp, Result);