blob: bc284427840e8242494d246443f29aa0e7f46d9c [file] [log] [blame]
Chris Lattner22eb9722006-06-18 05:43:12 +00001//===--- Preprocess.cpp - C Language Family Preprocessor Implementation ---===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner5b12ab82007-12-29 19:59:25 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Chris Lattner22eb9722006-06-18 05:43:12 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the Preprocessor interface.
11//
12//===----------------------------------------------------------------------===//
13//
Chris Lattner22eb9722006-06-18 05:43:12 +000014// Options to support:
15// -H - Print the name of each header file used.
Chris Lattner22eb9722006-06-18 05:43:12 +000016// -d[MDNI] - Dump various things.
17// -fworking-directory - #line's with preprocessor's working dir.
18// -fpreprocessed
19// -dependency-file,-M,-MM,-MF,-MG,-MP,-MT,-MQ,-MD,-MMD
20// -W*
21// -w
22//
23// Messages to emit:
24// "Multiple include guards may be useful for:\n"
25//
Chris Lattner22eb9722006-06-18 05:43:12 +000026//===----------------------------------------------------------------------===//
27
28#include "clang/Lex/Preprocessor.h"
Chris Lattner07b019a2006-10-22 07:28:56 +000029#include "clang/Lex/HeaderSearch.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000030#include "clang/Lex/MacroInfo.h"
Chris Lattnerb8761832006-06-24 21:31:03 +000031#include "clang/Lex/Pragma.h"
Chris Lattner0b8cfc22006-06-28 06:49:17 +000032#include "clang/Lex/ScratchBuffer.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000033#include "clang/Basic/Diagnostic.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000034#include "clang/Basic/SourceManager.h"
Chris Lattner81278c62006-10-14 19:03:49 +000035#include "clang/Basic/TargetInfo.h"
Chris Lattner7a4af3b2006-07-26 06:26:52 +000036#include "llvm/ADT/SmallVector.h"
Chris Lattner8a7003c2007-07-16 06:48:38 +000037#include "llvm/Support/MemoryBuffer.h"
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +000038#include "llvm/Support/Streams.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000039using namespace clang;
40
41//===----------------------------------------------------------------------===//
42
Ted Kremenek219bab32008-04-17 21:23:07 +000043PreprocessorFactory::~PreprocessorFactory() {}
44
Chris Lattner02dffbd2006-10-14 07:50:21 +000045Preprocessor::Preprocessor(Diagnostic &diags, const LangOptions &opts,
Chris Lattnerad7cdd32006-11-21 06:08:20 +000046 TargetInfo &target, SourceManager &SM,
Chris Lattner59a9ebd2006-10-18 05:34:33 +000047 HeaderSearch &Headers)
Chris Lattnerad7cdd32006-11-21 06:08:20 +000048 : Diags(diags), Features(opts), Target(target), FileMgr(Headers.getFileMgr()),
49 SourceMgr(SM), HeaderInfo(Headers), Identifiers(opts),
Chris Lattner285c0c12008-03-09 02:26:03 +000050 CurLexer(0), CurDirLookup(0), CurTokenLexer(0), Callbacks(0) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +000051 ScratchBuf = new ScratchBuffer(SourceMgr);
Chris Lattnerc02c4ab2007-07-15 00:25:26 +000052
Chris Lattner22eb9722006-06-18 05:43:12 +000053 // Clear stats.
Chris Lattner59a9ebd2006-10-18 05:34:33 +000054 NumDirectives = NumDefined = NumUndefined = NumPragma = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +000055 NumIf = NumElse = NumEndif = 0;
Chris Lattner78186052006-07-09 00:45:31 +000056 NumEnteredSourceFiles = 0;
57 NumMacroExpanded = NumFnMacroExpanded = NumBuiltinMacroExpanded = 0;
Chris Lattner510ab612006-07-20 04:47:30 +000058 NumFastMacroExpanded = NumTokenPaste = NumFastTokenPaste = 0;
Chris Lattner59a9ebd2006-10-18 05:34:33 +000059 MaxIncludeStackDepth = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +000060 NumSkipped = 0;
Chris Lattnerb352e3e2006-11-21 06:17:10 +000061
62 // Default to discarding comments.
63 KeepComments = false;
64 KeepMacroComments = false;
65
Chris Lattner22eb9722006-06-18 05:43:12 +000066 // Macro expansion is enabled.
67 DisableMacroExpansion = false;
Chris Lattneree8760b2006-07-15 07:42:55 +000068 InMacroArgs = false;
Chris Lattner285c0c12008-03-09 02:26:03 +000069 NumCachedTokenLexers = 0;
Chris Lattner0c885f52006-06-21 06:50:18 +000070
Argyrios Kyrtzidisb3dd1e02008-08-10 13:15:22 +000071 CacheTokens = false;
72 CachedLexPos = 0;
73
Chris Lattner8ff71992006-07-06 05:17:39 +000074 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
75 // This gets unpoisoned where it is allowed.
76 (Ident__VA_ARGS__ = getIdentifierInfo("__VA_ARGS__"))->setIsPoisoned();
77
Chris Lattnerb8761832006-06-24 21:31:03 +000078 // Initialize the pragma handlers.
79 PragmaHandlers = new PragmaNamespace(0);
80 RegisterBuiltinPragmas();
Chris Lattner677757a2006-06-28 05:26:32 +000081
82 // Initialize builtin macros like __LINE__ and friends.
83 RegisterBuiltinMacros();
Chris Lattner22eb9722006-06-18 05:43:12 +000084}
85
86Preprocessor::~Preprocessor() {
87 // Free any active lexers.
88 delete CurLexer;
89
Chris Lattner69772b02006-07-02 20:34:39 +000090 while (!IncludeMacroStack.empty()) {
91 delete IncludeMacroStack.back().TheLexer;
Chris Lattner285c0c12008-03-09 02:26:03 +000092 delete IncludeMacroStack.back().TheTokenLexer;
Chris Lattner69772b02006-07-02 20:34:39 +000093 IncludeMacroStack.pop_back();
Chris Lattner22eb9722006-06-18 05:43:12 +000094 }
Chris Lattnerc43ddc82007-10-07 08:44:20 +000095
96 // Free any macro definitions.
97 for (llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator I =
98 Macros.begin(), E = Macros.end(); I != E; ++I) {
99 // Free the macro definition.
100 delete I->second;
101 I->second = 0;
102 I->first->setHasMacroDefinition(false);
103 }
Chris Lattnerb8761832006-06-24 21:31:03 +0000104
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000105 // Free any cached macro expanders.
Chris Lattner285c0c12008-03-09 02:26:03 +0000106 for (unsigned i = 0, e = NumCachedTokenLexers; i != e; ++i)
107 delete TokenLexerCache[i];
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000108
Chris Lattnerb8761832006-06-24 21:31:03 +0000109 // Release pragma information.
110 delete PragmaHandlers;
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000111
112 // Delete the scratch buffer info.
113 delete ScratchBuf;
Chris Lattner22192932008-03-14 06:07:05 +0000114
115 delete Callbacks;
Chris Lattner22eb9722006-06-18 05:43:12 +0000116}
117
Nico Weber4c311642008-08-10 19:59:06 +0000118bool Preprocessor::isSystemHeader(const FileEntry* F) const {
119 if (F) {
120 DirectoryLookup::DirType DirInfo = HeaderInfo.getFileDirFlavor(F);
121 if (DirInfo == DirectoryLookup::SystemHeaderDir ||
122 DirInfo == DirectoryLookup::ExternCSystemHeaderDir)
123 return true;
124 }
125 return false;
126}
127
128
Chris Lattner22eb9722006-06-18 05:43:12 +0000129/// Diag - Forwarding function for diagnostics. This emits a diagnostic at
Chris Lattner146762e2007-07-20 16:59:19 +0000130/// the specified Token's location, translating the token's start
Chris Lattner22eb9722006-06-18 05:43:12 +0000131/// position in the current buffer into a SourcePosition object for rendering.
Chris Lattner36982e42007-05-16 17:49:37 +0000132void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID) {
Ted Kremenek1daa3cf2007-12-12 22:39:36 +0000133 Diags.Report(getFullLoc(Loc), DiagID);
Chris Lattner36982e42007-05-16 17:49:37 +0000134}
135
Chris Lattnercb283342006-06-18 06:48:37 +0000136void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
Chris Lattner22eb9722006-06-18 05:43:12 +0000137 const std::string &Msg) {
Ted Kremenek1daa3cf2007-12-12 22:39:36 +0000138 Diags.Report(getFullLoc(Loc), DiagID, &Msg, 1);
Chris Lattner22eb9722006-06-18 05:43:12 +0000139}
Chris Lattnerd01e2912006-06-18 16:22:51 +0000140
Chris Lattner3565c8e2008-05-05 06:45:50 +0000141void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
142 const std::string &Msg,
143 const SourceRange &R1, const SourceRange &R2) {
144 SourceRange R[] = {R1, R2};
145 Diags.Report(getFullLoc(Loc), DiagID, &Msg, 1, R, 2);
146}
147
148
149void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
150 const SourceRange &R) {
151 Diags.Report(getFullLoc(Loc), DiagID, 0, 0, &R, 1);
152}
153
154void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
155 const SourceRange &R1, const SourceRange &R2) {
156 SourceRange R[] = {R1, R2};
157 Diags.Report(getFullLoc(Loc), DiagID, 0, 0, R, 2);
158}
159
160
Chris Lattner146762e2007-07-20 16:59:19 +0000161void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000162 llvm::cerr << tok::getTokenName(Tok.getKind()) << " '"
163 << getSpelling(Tok) << "'";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000164
165 if (!DumpFlags) return;
Chris Lattner615315f2007-12-09 20:31:55 +0000166
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000167 llvm::cerr << "\t";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000168 if (Tok.isAtStartOfLine())
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000169 llvm::cerr << " [StartOfLine]";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000170 if (Tok.hasLeadingSpace())
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000171 llvm::cerr << " [LeadingSpace]";
Chris Lattner6e4bf522006-07-27 06:59:25 +0000172 if (Tok.isExpandDisabled())
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000173 llvm::cerr << " [ExpandDisabled]";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000174 if (Tok.needsCleaning()) {
Chris Lattner50b497e2006-06-18 16:32:35 +0000175 const char *Start = SourceMgr.getCharacterData(Tok.getLocation());
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000176 llvm::cerr << " [UnClean='" << std::string(Start, Start+Tok.getLength())
177 << "']";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000178 }
Chris Lattner615315f2007-12-09 20:31:55 +0000179
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000180 llvm::cerr << "\tLoc=<";
Chris Lattner615315f2007-12-09 20:31:55 +0000181 DumpLocation(Tok.getLocation());
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000182 llvm::cerr << ">";
Chris Lattner615315f2007-12-09 20:31:55 +0000183}
184
185void Preprocessor::DumpLocation(SourceLocation Loc) const {
186 SourceLocation LogLoc = SourceMgr.getLogicalLoc(Loc);
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000187 llvm::cerr << SourceMgr.getSourceName(LogLoc) << ':'
188 << SourceMgr.getLineNumber(LogLoc) << ':'
Ted Kremenek0fff6d32008-07-19 19:10:04 +0000189 << SourceMgr.getColumnNumber(LogLoc);
Chris Lattner615315f2007-12-09 20:31:55 +0000190
191 SourceLocation PhysLoc = SourceMgr.getPhysicalLoc(Loc);
192 if (PhysLoc != LogLoc) {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000193 llvm::cerr << " <PhysLoc=";
Chris Lattner615315f2007-12-09 20:31:55 +0000194 DumpLocation(PhysLoc);
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000195 llvm::cerr << ">";
Chris Lattner615315f2007-12-09 20:31:55 +0000196 }
Chris Lattnerd01e2912006-06-18 16:22:51 +0000197}
198
199void Preprocessor::DumpMacro(const MacroInfo &MI) const {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000200 llvm::cerr << "MACRO: ";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000201 for (unsigned i = 0, e = MI.getNumTokens(); i != e; ++i) {
202 DumpToken(MI.getReplacementToken(i));
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000203 llvm::cerr << " ";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000204 }
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000205 llvm::cerr << "\n";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000206}
207
Chris Lattner22eb9722006-06-18 05:43:12 +0000208void Preprocessor::PrintStats() {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000209 llvm::cerr << "\n*** Preprocessor Stats:\n";
210 llvm::cerr << NumDirectives << " directives found:\n";
211 llvm::cerr << " " << NumDefined << " #define.\n";
212 llvm::cerr << " " << NumUndefined << " #undef.\n";
213 llvm::cerr << " #include/#include_next/#import:\n";
214 llvm::cerr << " " << NumEnteredSourceFiles << " source files entered.\n";
215 llvm::cerr << " " << MaxIncludeStackDepth << " max include stack depth\n";
216 llvm::cerr << " " << NumIf << " #if/#ifndef/#ifdef.\n";
217 llvm::cerr << " " << NumElse << " #else/#elif.\n";
218 llvm::cerr << " " << NumEndif << " #endif.\n";
219 llvm::cerr << " " << NumPragma << " #pragma.\n";
220 llvm::cerr << NumSkipped << " #if/#ifndef#ifdef regions skipped\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000221
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000222 llvm::cerr << NumMacroExpanded << "/" << NumFnMacroExpanded << "/"
223 << NumBuiltinMacroExpanded << " obj/fn/builtin macros expanded, "
224 << NumFastMacroExpanded << " on the fast path.\n";
225 llvm::cerr << (NumFastTokenPaste+NumTokenPaste)
226 << " token paste (##) operations performed, "
227 << NumFastTokenPaste << " on the fast path.\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000228}
229
230//===----------------------------------------------------------------------===//
Chris Lattnerd01e2912006-06-18 16:22:51 +0000231// Token Spelling
232//===----------------------------------------------------------------------===//
233
234
235/// getSpelling() - Return the 'spelling' of this token. The spelling of a
236/// token are the characters used to represent the token in the source file
237/// after trigraph expansion and escaped-newline folding. In particular, this
238/// wants to get the true, uncanonicalized, spelling of things like digraphs
239/// UCNs, etc.
Chris Lattner146762e2007-07-20 16:59:19 +0000240std::string Preprocessor::getSpelling(const Token &Tok) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000241 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
242
243 // If this token contains nothing interesting, return it directly.
Chris Lattner50b497e2006-06-18 16:32:35 +0000244 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000245 if (!Tok.needsCleaning())
246 return std::string(TokStart, TokStart+Tok.getLength());
247
Chris Lattnerd01e2912006-06-18 16:22:51 +0000248 std::string Result;
249 Result.reserve(Tok.getLength());
250
Chris Lattneref9eae12006-07-04 22:33:12 +0000251 // Otherwise, hard case, relex the characters into the string.
Chris Lattnerd01e2912006-06-18 16:22:51 +0000252 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
253 Ptr != End; ) {
254 unsigned CharSize;
255 Result.push_back(Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features));
256 Ptr += CharSize;
257 }
258 assert(Result.size() != unsigned(Tok.getLength()) &&
259 "NeedsCleaning flag set on something that didn't need cleaning!");
260 return Result;
261}
262
263/// getSpelling - This method is used to get the spelling of a token into a
264/// preallocated buffer, instead of as an std::string. The caller is required
265/// to allocate enough space for the token, which is guaranteed to be at least
266/// Tok.getLength() bytes long. The actual length of the token is returned.
Chris Lattneref9eae12006-07-04 22:33:12 +0000267///
268/// Note that this method may do two possible things: it may either fill in
269/// the buffer specified with characters, or it may *change the input pointer*
270/// to point to a constant buffer with the data already in it (avoiding a
271/// copy). The caller is not allowed to modify the returned buffer pointer
272/// if an internal buffer is returned.
Chris Lattner146762e2007-07-20 16:59:19 +0000273unsigned Preprocessor::getSpelling(const Token &Tok,
Chris Lattneref9eae12006-07-04 22:33:12 +0000274 const char *&Buffer) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000275 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
276
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000277 // If this token is an identifier, just return the string from the identifier
278 // table, which is very quick.
279 if (const IdentifierInfo *II = Tok.getIdentifierInfo()) {
280 Buffer = II->getName();
Chris Lattner32e6d642007-07-22 22:50:09 +0000281
282 // Return the length of the token. If the token needed cleaning, don't
283 // include the size of the newlines or trigraphs in it.
284 if (!Tok.needsCleaning())
285 return Tok.getLength();
286 else
287 return strlen(Buffer);
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000288 }
289
290 // Otherwise, compute the start of the token in the input lexer buffer.
Chris Lattner50b497e2006-06-18 16:32:35 +0000291 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000292
293 // If this token contains nothing interesting, return it directly.
294 if (!Tok.needsCleaning()) {
Chris Lattneref9eae12006-07-04 22:33:12 +0000295 Buffer = TokStart;
296 return Tok.getLength();
Chris Lattnerd01e2912006-06-18 16:22:51 +0000297 }
298 // Otherwise, hard case, relex the characters into the string.
Chris Lattneref9eae12006-07-04 22:33:12 +0000299 char *OutBuf = const_cast<char*>(Buffer);
Chris Lattnerd01e2912006-06-18 16:22:51 +0000300 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
301 Ptr != End; ) {
302 unsigned CharSize;
303 *OutBuf++ = Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features);
304 Ptr += CharSize;
305 }
306 assert(unsigned(OutBuf-Buffer) != Tok.getLength() &&
307 "NeedsCleaning flag set on something that didn't need cleaning!");
308
309 return OutBuf-Buffer;
310}
311
Chris Lattnerb94ec7b2006-07-14 06:54:10 +0000312
313/// CreateString - Plop the specified string into a scratch buffer and return a
314/// location for it. If specified, the source location provides a source
315/// location for the token.
316SourceLocation Preprocessor::
317CreateString(const char *Buf, unsigned Len, SourceLocation SLoc) {
318 if (SLoc.isValid())
319 return ScratchBuf->getToken(Buf, Len, SLoc);
320 return ScratchBuf->getToken(Buf, Len);
321}
322
323
Chris Lattner8a7003c2007-07-16 06:48:38 +0000324/// AdvanceToTokenCharacter - Given a location that specifies the start of a
325/// token, return a new location that specifies a character within the token.
326SourceLocation Preprocessor::AdvanceToTokenCharacter(SourceLocation TokStart,
327 unsigned CharNo) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000328 // If they request the first char of the token, we're trivially done. If this
329 // is a macro expansion, it doesn't make sense to point to a character within
330 // the instantiation point (the name). We could point to the source
331 // character, but without also pointing to instantiation info, this is
332 // confusing.
333 if (CharNo == 0 || TokStart.isMacroID()) return TokStart;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000334
335 // Figure out how many physical characters away the specified logical
336 // character is. This needs to take into consideration newlines and
337 // trigraphs.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000338 const char *TokPtr = SourceMgr.getCharacterData(TokStart);
339 unsigned PhysOffset = 0;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000340
341 // The usual case is that tokens don't contain anything interesting. Skip
342 // over the uninteresting characters. If a token only consists of simple
343 // chars, this method is extremely fast.
344 while (CharNo && Lexer::isObviouslySimpleCharacter(*TokPtr))
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000345 ++TokPtr, --CharNo, ++PhysOffset;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000346
347 // If we have a character that may be a trigraph or escaped newline, create a
348 // lexer to parse it correctly.
Chris Lattner8a7003c2007-07-16 06:48:38 +0000349 if (CharNo != 0) {
350 // Create a lexer starting at this token position.
Chris Lattner77e9de52007-07-20 16:52:03 +0000351 Lexer TheLexer(TokStart, *this, TokPtr);
Chris Lattner146762e2007-07-20 16:59:19 +0000352 Token Tok;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000353 // Skip over characters the remaining characters.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000354 const char *TokStartPtr = TokPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000355 for (; CharNo; --CharNo)
356 TheLexer.getAndAdvanceChar(TokPtr, Tok);
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000357
358 PhysOffset += TokPtr-TokStartPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000359 }
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000360
361 return TokStart.getFileLocWithOffset(PhysOffset);
Chris Lattner8a7003c2007-07-16 06:48:38 +0000362}
363
364
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000365//===----------------------------------------------------------------------===//
366// Preprocessor Initialization Methods
367//===----------------------------------------------------------------------===//
368
369// Append a #define line to Buf for Macro. Macro should be of the form XXX,
370// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
371// "#define XXX Y z W". To get a #define with no value, use "XXX=".
372static void DefineBuiltinMacro(std::vector<char> &Buf, const char *Macro,
373 const char *Command = "#define ") {
374 Buf.insert(Buf.end(), Command, Command+strlen(Command));
375 if (const char *Equal = strchr(Macro, '=')) {
376 // Turn the = into ' '.
377 Buf.insert(Buf.end(), Macro, Equal);
378 Buf.push_back(' ');
379 Buf.insert(Buf.end(), Equal+1, Equal+strlen(Equal));
380 } else {
381 // Push "macroname 1".
382 Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
383 Buf.push_back(' ');
384 Buf.push_back('1');
385 }
386 Buf.push_back('\n');
387}
388
389
390static void InitializePredefinedMacros(Preprocessor &PP,
391 std::vector<char> &Buf) {
392 // FIXME: Implement magic like cpp_init_builtins for things like __STDC__
393 // and __DATE__ etc.
394#if 0
395 /* __STDC__ has the value 1 under normal circumstances.
396 However, if (a) we are in a system header, (b) the option
397 stdc_0_in_system_headers is true (set by target config), and
398 (c) we are not in strictly conforming mode, then it has the
399 value 0. (b) and (c) are already checked in cpp_init_builtins. */
400 //case BT_STDC:
401 if (cpp_in_system_header (pfile))
402 number = 0;
403 else
404 number = 1;
405 break;
406#endif
407 // These should all be defined in the preprocessor according to the
408 // current language configuration.
409 DefineBuiltinMacro(Buf, "__STDC__=1");
410 //DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
411 if (PP.getLangOptions().C99 && !PP.getLangOptions().CPlusPlus)
412 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199901L");
413 else if (0) // STDC94 ?
414 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199409L");
415
416 DefineBuiltinMacro(Buf, "__STDC_HOSTED__=1");
417 if (PP.getLangOptions().ObjC1)
418 DefineBuiltinMacro(Buf, "__OBJC__=1");
Steve Naroffad918682008-05-15 21:12:10 +0000419 if (PP.getLangOptions().ObjC2)
420 DefineBuiltinMacro(Buf, "OBJC_NEW_PROPERTIES");
Steve Naroff6d40db02007-10-31 18:42:27 +0000421
Chris Lattnered2a9eb2007-10-10 17:48:53 +0000422 // Add __builtin_va_list typedef.
423 {
424 const char *VAList = PP.getTargetInfo().getVAListDeclaration();
425 Buf.insert(Buf.end(), VAList, VAList+strlen(VAList));
426 Buf.push_back('\n');
427 }
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000428
429 // Get the target #defines.
430 PP.getTargetInfo().getTargetDefines(Buf);
Chris Lattnerd1224b22008-06-26 17:26:01 +0000431
432 DefineBuiltinMacro(Buf, "__llvm__=1"); // LLVM Backend
433 DefineBuiltinMacro(Buf, "__clang__=1"); // Clang Frontend
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000434
435 // Compiler set macros.
436 DefineBuiltinMacro(Buf, "__APPLE_CC__=5250");
Steve Naroff68754c52007-11-10 18:06:36 +0000437 DefineBuiltinMacro(Buf, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__=1050");
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000438 DefineBuiltinMacro(Buf, "__GNUC_MINOR__=0");
439 DefineBuiltinMacro(Buf, "__GNUC_PATCHLEVEL__=1");
440 DefineBuiltinMacro(Buf, "__GNUC__=4");
441 DefineBuiltinMacro(Buf, "__GXX_ABI_VERSION=1002");
442 DefineBuiltinMacro(Buf, "__VERSION__=\"4.0.1 (Apple Computer, Inc. "
443 "build 5250)\"");
444
445 // Build configuration options.
446 DefineBuiltinMacro(Buf, "__DYNAMIC__=1");
447 DefineBuiltinMacro(Buf, "__FINITE_MATH_ONLY__=0");
448 DefineBuiltinMacro(Buf, "__NO_INLINE__=1");
449 DefineBuiltinMacro(Buf, "__PIC__=1");
450
451
452 if (PP.getLangOptions().CPlusPlus) {
453 DefineBuiltinMacro(Buf, "__DEPRECATED=1");
454 DefineBuiltinMacro(Buf, "__EXCEPTIONS=1");
455 DefineBuiltinMacro(Buf, "__GNUG__=4");
456 DefineBuiltinMacro(Buf, "__GXX_WEAK__=1");
457 DefineBuiltinMacro(Buf, "__cplusplus=1");
458 DefineBuiltinMacro(Buf, "__private_extern__=extern");
459 }
Steve Naroffb2c80c72008-02-07 03:50:06 +0000460 if (PP.getLangOptions().Microsoft) {
461 DefineBuiltinMacro(Buf, "__stdcall=");
462 DefineBuiltinMacro(Buf, "__cdecl=");
463 DefineBuiltinMacro(Buf, "_cdecl=");
464 DefineBuiltinMacro(Buf, "__ptr64=");
Steve Naroff4e79d342008-02-07 23:24:32 +0000465 DefineBuiltinMacro(Buf, "__w64=");
Steve Naroffb2c80c72008-02-07 03:50:06 +0000466 DefineBuiltinMacro(Buf, "__forceinline=");
Steve Naroff6936a082008-02-07 15:26:07 +0000467 DefineBuiltinMacro(Buf, "__int8=char");
468 DefineBuiltinMacro(Buf, "__int16=short");
469 DefineBuiltinMacro(Buf, "__int32=int");
Chris Lattner00c5b282008-02-10 21:12:45 +0000470 DefineBuiltinMacro(Buf, "__int64=long long");
Steve Naroff5915777f2008-02-11 22:29:58 +0000471 DefineBuiltinMacro(Buf, "__declspec(X)=");
Steve Naroffb2c80c72008-02-07 03:50:06 +0000472 }
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000473 // FIXME: Should emit a #line directive here.
474}
475
476
477/// EnterMainSourceFile - Enter the specified FileID as the main source file,
Nate Begemanf7c3ff62008-01-07 04:01:26 +0000478/// which implicitly adds the builtin defines etc.
Ted Kremenek230bd912007-12-19 22:51:13 +0000479void Preprocessor::EnterMainSourceFile() {
480
481 unsigned MainFileID = SourceMgr.getMainFileID();
482
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000483 // Enter the main file source buffer.
484 EnterSourceFile(MainFileID, 0);
485
Chris Lattner609d4132007-11-15 19:07:47 +0000486 // Tell the header info that the main file was entered. If the file is later
487 // #imported, it won't be re-entered.
488 if (const FileEntry *FE =
489 SourceMgr.getFileEntryForLoc(SourceLocation::getFileLoc(MainFileID, 0)))
490 HeaderInfo.IncrementIncludeCount(FE);
491
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000492 std::vector<char> PrologFile;
493 PrologFile.reserve(4080);
494
495 // Install things like __POWERPC__, __GNUC__, etc into the macro table.
496 InitializePredefinedMacros(*this, PrologFile);
497
498 // Add on the predefines from the driver.
Chris Lattnerba1f37b2008-04-19 23:09:31 +0000499 PrologFile.insert(PrologFile.end(), Predefines.begin(), Predefines.end());
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000500
501 // Memory buffer must end with a null byte!
502 PrologFile.push_back(0);
503
504 // Now that we have emitted the predefined macros, #includes, etc into
505 // PrologFile, preprocess it to populate the initial preprocessor state.
506 llvm::MemoryBuffer *SB =
507 llvm::MemoryBuffer::getMemBufferCopy(&PrologFile.front(),&PrologFile.back(),
508 "<predefines>");
509 assert(SB && "Cannot fail to create predefined source buffer");
510 unsigned FileID = SourceMgr.createFileIDForMemBuffer(SB);
511 assert(FileID && "Could not create FileID for predefines?");
512
513 // Start parsing the predefines.
514 EnterSourceFile(FileID, 0);
515}
Chris Lattner8a7003c2007-07-16 06:48:38 +0000516
Chris Lattner677757a2006-06-28 05:26:32 +0000517
518//===----------------------------------------------------------------------===//
519// Lexer Event Handling.
520//===----------------------------------------------------------------------===//
521
Chris Lattnercefc7682006-07-08 08:28:12 +0000522/// LookUpIdentifierInfo - Given a tok::identifier token, look up the
523/// identifier information for the token and install it into the token.
Chris Lattner146762e2007-07-20 16:59:19 +0000524IdentifierInfo *Preprocessor::LookUpIdentifierInfo(Token &Identifier,
Chris Lattnercefc7682006-07-08 08:28:12 +0000525 const char *BufPtr) {
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000526 assert(Identifier.is(tok::identifier) && "Not an identifier!");
Chris Lattnercefc7682006-07-08 08:28:12 +0000527 assert(Identifier.getIdentifierInfo() == 0 && "Identinfo already exists!");
528
529 // Look up this token, see if it is a macro, or if it is a language keyword.
530 IdentifierInfo *II;
531 if (BufPtr && !Identifier.needsCleaning()) {
532 // No cleaning needed, just use the characters from the lexed buffer.
533 II = getIdentifierInfo(BufPtr, BufPtr+Identifier.getLength());
534 } else {
535 // Cleaning needed, alloca a buffer, clean into it, then use the buffer.
Chris Lattnerf9aba2c2007-07-13 17:10:38 +0000536 llvm::SmallVector<char, 64> IdentifierBuffer;
537 IdentifierBuffer.resize(Identifier.getLength());
538 const char *TmpBuf = &IdentifierBuffer[0];
Chris Lattnercefc7682006-07-08 08:28:12 +0000539 unsigned Size = getSpelling(Identifier, TmpBuf);
540 II = getIdentifierInfo(TmpBuf, TmpBuf+Size);
541 }
Chris Lattner8c204872006-10-14 05:19:21 +0000542 Identifier.setIdentifierInfo(II);
Chris Lattnercefc7682006-07-08 08:28:12 +0000543 return II;
544}
545
546
Chris Lattner677757a2006-06-28 05:26:32 +0000547/// HandleIdentifier - This callback is invoked when the lexer reads an
548/// identifier. This callback looks up the identifier in the map and/or
549/// potentially macro expands it or turns it into a named token (like 'for').
Chris Lattner146762e2007-07-20 16:59:19 +0000550void Preprocessor::HandleIdentifier(Token &Identifier) {
Chris Lattner0f1f5052006-07-20 04:16:23 +0000551 assert(Identifier.getIdentifierInfo() &&
552 "Can't handle identifiers without identifier info!");
553
Chris Lattnerc79f6fb2006-07-04 17:53:21 +0000554 IdentifierInfo &II = *Identifier.getIdentifierInfo();
Chris Lattner677757a2006-06-28 05:26:32 +0000555
556 // If this identifier was poisoned, and if it was not produced from a macro
557 // expansion, emit an error.
Chris Lattner8ff71992006-07-06 05:17:39 +0000558 if (II.isPoisoned() && CurLexer) {
559 if (&II != Ident__VA_ARGS__) // We warn about __VA_ARGS__ with poisoning.
560 Diag(Identifier, diag::err_pp_used_poisoned_id);
561 else
562 Diag(Identifier, diag::ext_pp_bad_vaargs_use);
563 }
Chris Lattner677757a2006-06-28 05:26:32 +0000564
Chris Lattner78186052006-07-09 00:45:31 +0000565 // If this is a macro to be expanded, do it.
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000566 if (MacroInfo *MI = getMacroInfo(&II)) {
Chris Lattner6e4bf522006-07-27 06:59:25 +0000567 if (!DisableMacroExpansion && !Identifier.isExpandDisabled()) {
568 if (MI->isEnabled()) {
569 if (!HandleMacroExpandedIdentifier(Identifier, MI))
570 return;
571 } else {
572 // C99 6.10.3.4p2 says that a disabled macro may never again be
573 // expanded, even if it's in a context where it could be expanded in the
574 // future.
Chris Lattner146762e2007-07-20 16:59:19 +0000575 Identifier.setFlag(Token::DisableExpand);
Chris Lattner6e4bf522006-07-27 06:59:25 +0000576 }
577 }
Chris Lattner063400e2006-10-14 19:54:15 +0000578 }
Chris Lattner677757a2006-06-28 05:26:32 +0000579
Chris Lattner5b9f4892006-11-21 17:23:33 +0000580 // C++ 2.11p2: If this is an alternative representation of a C++ operator,
581 // then we act as if it is the actual operator and not the textual
582 // representation of it.
583 if (II.isCPlusPlusOperatorKeyword())
584 Identifier.setIdentifierInfo(0);
585
Chris Lattner677757a2006-06-28 05:26:32 +0000586 // Change the kind of this identifier to the appropriate token kind, e.g.
587 // turning "for" into a keyword.
Chris Lattner8c204872006-10-14 05:19:21 +0000588 Identifier.setKind(II.getTokenID());
Chris Lattner677757a2006-06-28 05:26:32 +0000589
590 // If this is an extension token, diagnose its use.
Steve Naroffa8fd9732007-06-11 00:35:03 +0000591 // FIXME: tried (unsuccesfully) to shut this up when compiling with gnu99
592 // For now, I'm just commenting it out (while I work on attributes).
Chris Lattner53621a52007-06-13 20:44:40 +0000593 if (II.isExtensionToken() && Features.C99)
594 Diag(Identifier, diag::ext_token_used);
Chris Lattner677757a2006-06-28 05:26:32 +0000595}