[cfe-commits] r62419 - in /cfe/trunk: include/clang/Lex/Lexer.h lib/Lex/Lexer.cpp
Chris Lattner
sabre at nondot.org
Fri Jan 16 23:56:59 PST 2009
Author: lattner
Date: Sat Jan 17 01:56:59 2009
New Revision: 62419
URL: http://llvm.org/viewvc/llvm-project?rev=62419&view=rev
Log:
More simplifications to the lexer ctors.
Modified:
cfe/trunk/include/clang/Lex/Lexer.h
cfe/trunk/lib/Lex/Lexer.cpp
Modified: cfe/trunk/include/clang/Lex/Lexer.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Lexer.h?rev=62419&r1=62418&r2=62419&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/Lexer.h (original)
+++ cfe/trunk/include/clang/Lex/Lexer.h Sat Jan 17 01:56:59 2009
@@ -77,8 +77,9 @@
/// with the specified preprocessor managing the lexing process. This lexer
/// assumes that the associated file buffer and Preprocessor objects will
/// outlive it, so it doesn't take ownership of either of them.
+ Lexer(SourceLocation FileLoc, Preprocessor &PP);
Lexer(SourceLocation FileLoc, Preprocessor &PP,
- const char *BufStart = 0, const char *BufEnd = 0);
+ const char *BufStart, const char *BufEnd);
/// Lexer constructor - Create a new raw lexer object. This object is only
/// suitable for calls to 'LexRawToken'. This lexer assumes that the text
@@ -310,6 +311,7 @@
/// getCharAndSizeSlow - Handle the slow/uncommon case of the getCharAndSize
/// method.
char getCharAndSizeSlow(const char *Ptr, unsigned &Size, Token *Tok = 0);
+public:
/// getCharAndSizeNoWarn - Like the getCharAndSize method, but does not ever
/// emit a warning.
@@ -325,6 +327,7 @@
Size = 0;
return getCharAndSizeSlowNoWarn(Ptr, Size, Features);
}
+private:
/// getCharAndSizeSlowNoWarn - Same as getCharAndSizeSlow, but never emits a
/// diagnostic.
Modified: cfe/trunk/lib/Lex/Lexer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=62419&r1=62418&r2=62419&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/Lexer.cpp (original)
+++ cfe/trunk/lib/Lex/Lexer.cpp Sat Jan 17 01:56:59 2009
@@ -90,6 +90,28 @@
ExtendedTokenMode = 0;
}
+/// Lexer constructor - Create a new lexer object for the specified buffer
+/// with the specified preprocessor managing the lexing process. This lexer
+/// assumes that the associated file buffer and Preprocessor objects will
+/// outlive it, so it doesn't take ownership of either of them.
+Lexer::Lexer(SourceLocation fileloc, Preprocessor &PP)
+// FIXME: This is really horrible and only needed for _Pragma lexers, split this
+// out of the main lexer path!
+: PreprocessorLexer(&PP,
+ PP.getSourceManager().getCanonicalFileID(
+ PP.getSourceManager().getSpellingLoc(fileloc))),
+ FileLoc(fileloc),
+ Features(PP.getLangOptions()) {
+
+ SourceManager &SourceMgr = PP.getSourceManager();
+ const llvm::MemoryBuffer *InputFile = SourceMgr.getBuffer(getFileID());
+
+ InitLexer(InputFile->getBufferStart(), InputFile->getBufferStart(),
+ InputFile->getBufferEnd());
+
+ // Default to keeping comments if the preprocessor wants them.
+ SetCommentRetentionState(PP.getCommentRetentionState());
+}
/// Lexer constructor - Create a new lexer object for the specified buffer
/// with the specified preprocessor managing the lexing process. This lexer
@@ -105,16 +127,8 @@
FileLoc(fileloc),
Features(PP.getLangOptions()) {
- SourceManager &SourceMgr = PP.getSourceManager();
- const llvm::MemoryBuffer *InputFile = SourceMgr.getBuffer(getFileID());
-
- // BufferPtr and BufferEnd can start out somewhere inside the current buffer.
- // If unspecified, they starts at the start/end of the buffer.
- const char *BufStart = InputFile->getBufferStart();
- if (BufPtr == 0) BufPtr = BufStart;
- if (BufEnd == 0) BufEnd = InputFile->getBufferEnd();
-
- InitLexer(BufStart, BufPtr, BufEnd);
+ InitLexer(PP.getSourceManager().getBuffer(getFileID())->getBufferStart(),
+ BufPtr, BufEnd);
// Default to keeping comments if the preprocessor wants them.
SetCommentRetentionState(PP.getCommentRetentionState());
More information about the cfe-commits
mailing list