19 #include "llvm/Support/Path.h" 20 #include "llvm/Support/raw_ostream.h" 24 using namespace clang;
49 unsigned &CurTok,
bool ReturnComment) {
50 assert(CurTok < RawTokens.size() &&
"Overran eof!");
53 if (!ReturnComment && RawTokens[CurTok].is(tok::comment))
56 return RawTokens[CurTok++];
63 std::vector<Token> &RawTokens) {
76 RawLex.LexFromRawLexer(RawTok);
81 if (RawTok.
is(tok::raw_identifier))
84 RawTokens.push_back(RawTok);
97 std::vector<Token> RawTokens;
99 unsigned CurRawTok = 0;
130 if (RawTokens[CurRawTok].is(tok::identifier)) {
131 const IdentifierInfo *II = RawTokens[CurRawTok].getIdentifierInfo();
132 if (II->
getName() ==
"warning") {
135 }
else if (II->
getName() ==
"pragma" &&
136 RawTokens[CurRawTok+1].is(tok::identifier) &&
137 (RawTokens[CurRawTok+1].getIdentifierInfo()->getName() ==
158 if (PPOffs == RawOffs &&
isSameToken(RawTok, PPTok)) {
166 if (RawOffs <= PPOffs) {
179 if (RawTok.
is(tok::comment)) {
186 (PPOffs != RawOffs || !
isSameToken(RawTok, PPTok)));
195 unsigned InsertPos = PPOffs;
196 std::string Expansion;
197 while (PPOffs < RawOffs) {
212 *OS << std::string(RewriteBuf->begin(), RewriteBuf->end());
214 fprintf(stderr,
"No changes\n");
Lexer - This provides a simple interface that turns a text buffer into a stream of tokens...
bool is(tok::TokenKind K) const
is/isNot - Predicates to check if this token is a specific kind, as in "if (Tok.is(tok::l_brace)) {...
Defines the SourceManager interface.
RewriteBuffer & getEditBuffer(FileID FID)
getEditBuffer - This is like getRewriteBufferFor, but always returns a buffer, and allows you to writ...
RewriteBuffer - As code is rewritten, SourceBuffer's from the original input with modifications get a...
tok::TokenKind getKind() const
One of these records is kept for each identifier that is lexed.
static bool isSameToken(Token &RawTok, Token &PPTok)
isSameToken - Return true if the two specified tokens start have the same content.
Token - This structure provides full information about a lexed token.
const LangOptions & getLangOpts() const
StringRef getSpelling(SourceLocation loc, SmallVectorImpl< char > &buffer, bool *invalid=nullptr) const
Return the 'spelling' of the token at the given location; does not go up to the spelling location or ...
SourceLocation getExpansionLoc(SourceLocation Loc) const
Given a SourceLocation object Loc, return the expansion location referenced by the ID...
void RewriteMacrosInInput(Preprocessor &PP, raw_ostream *OS)
RewriteMacrosInInput - Implement -rewrite-macros mode.
IdentifierInfo * LookUpIdentifierInfo(Token &Identifier) const
Given a tok::raw_identifier token, look up the identifier information for the token and install it in...
void EnterMainSourceFile()
Enter the specified FileID as the main source file, which implicitly adds the builtin defines etc...
SourceLocation getLocation() const
Return a source location identifier for the specified offset in the current file. ...
Defines the clang::Preprocessor interface.
bool isWrittenInMainFile(SourceLocation Loc) const
Returns true if the spelling location for the given location is in the main file buffer.
void InsertTextAfter(unsigned OrigOffset, StringRef Str)
InsertTextAfter - Insert some text at the specified point, where the offset in the buffer is specifie...
static void LexRawTokensFromMainFile(Preprocessor &PP, std::vector< Token > &RawTokens)
LexRawTokensFromMainFile - Lets all the raw tokens from the main file into the specified vector...
SourceManager & getSourceManager() const
unsigned getFileOffset(SourceLocation SpellingLoc) const
Returns the offset from the start of the file that the specified SourceLocation represents.
llvm::MemoryBuffer * getBuffer(FileID FID, SourceLocation Loc, bool *Invalid=nullptr) const
Return the buffer for the specified FileID.
void setSourceMgr(SourceManager &SM, const LangOptions &LO)
Encodes a location in the source.
IdentifierInfo * getIdentifierInfo() const
const RewriteBuffer * getRewriteBufferFor(FileID FID) const
getRewriteBufferFor - Return the rewrite buffer for the specified FileID.
void Lex(Token &Result)
Lex the next token for this preprocessor.
bool isAtStartOfLine() const
isAtStartOfLine - Return true if this token is at the start of a line.
StringRef getName() const
Return the actual identifier string.
bool isNot(tok::TokenKind K) const
void InsertTextBefore(unsigned OrigOffset, StringRef Str)
InsertTextBefore - Insert some text before the specified point, where the offset in the buffer is spe...
Dataflow Directional Tag Classes.
static const Token & GetNextRawTok(const std::vector< Token > &RawTokens, unsigned &CurTok, bool ReturnComment)
GetNextRawTok - Return the next raw token in the stream, skipping over comments if ReturnComment is f...
FileID getMainFileID() const
Returns the FileID of the main source file.
unsigned getLength() const
Rewriter - This is the main interface to the rewrite buffers.
void SetCommentRetentionState(bool Mode)
SetCommentRetentionMode - Change the comment retention mode of the lexer to the specified mode...
bool hasLeadingSpace() const
Return true if this token has whitespace before it.
This class handles loading and caching of source files into memory.
Engages in a tight little dance with the lexer to efficiently preprocess tokens.