blob: ccc9a8781ff6c69cbbeab9c6e0b39d2819d67727 [file] [log] [blame]
Chris Lattner4b009652007-07-25 00:24:17 +00001//===--- Preprocess.cpp - C Language Family Preprocessor Implementation ---===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner959e5be2007-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 Lattner4b009652007-07-25 00:24:17 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the Preprocessor interface.
11//
12//===----------------------------------------------------------------------===//
13//
14// Options to support:
15// -H - Print the name of each header file used.
16// -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//
26//===----------------------------------------------------------------------===//
27
28#include "clang/Lex/Preprocessor.h"
29#include "clang/Lex/HeaderSearch.h"
30#include "clang/Lex/MacroInfo.h"
Chris Lattner4b009652007-07-25 00:24:17 +000031#include "clang/Lex/Pragma.h"
32#include "clang/Lex/ScratchBuffer.h"
33#include "clang/Basic/Diagnostic.h"
Chris Lattner4b009652007-07-25 00:24:17 +000034#include "clang/Basic/SourceManager.h"
35#include "clang/Basic/TargetInfo.h"
36#include "llvm/ADT/SmallVector.h"
37#include "llvm/Support/MemoryBuffer.h"
Ted Kremenekce4c64e2008-01-14 16:44:48 +000038#include "llvm/Support/Streams.h"
Chris Lattner4b009652007-07-25 00:24:17 +000039using namespace clang;
40
41//===----------------------------------------------------------------------===//
42
Ted Kremenek5ab36b02008-04-17 21:23:07 +000043PreprocessorFactory::~PreprocessorFactory() {}
44
Chris Lattner4b009652007-07-25 00:24:17 +000045Preprocessor::Preprocessor(Diagnostic &diags, const LangOptions &opts,
46 TargetInfo &target, SourceManager &SM,
47 HeaderSearch &Headers)
48 : Diags(diags), Features(opts), Target(target), FileMgr(Headers.getFileMgr()),
49 SourceMgr(SM), HeaderInfo(Headers), Identifiers(opts),
Chris Lattner5b54ed92008-03-09 02:26:03 +000050 CurLexer(0), CurDirLookup(0), CurTokenLexer(0), Callbacks(0) {
Chris Lattner4b009652007-07-25 00:24:17 +000051 ScratchBuf = new ScratchBuffer(SourceMgr);
52
53 // Clear stats.
54 NumDirectives = NumDefined = NumUndefined = NumPragma = 0;
55 NumIf = NumElse = NumEndif = 0;
56 NumEnteredSourceFiles = 0;
57 NumMacroExpanded = NumFnMacroExpanded = NumBuiltinMacroExpanded = 0;
58 NumFastMacroExpanded = NumTokenPaste = NumFastTokenPaste = 0;
59 MaxIncludeStackDepth = 0;
60 NumSkipped = 0;
61
62 // Default to discarding comments.
63 KeepComments = false;
64 KeepMacroComments = false;
65
66 // Macro expansion is enabled.
67 DisableMacroExpansion = false;
68 InMacroArgs = false;
Chris Lattner5b54ed92008-03-09 02:26:03 +000069 NumCachedTokenLexers = 0;
Chris Lattner4b009652007-07-25 00:24:17 +000070
71 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
72 // This gets unpoisoned where it is allowed.
73 (Ident__VA_ARGS__ = getIdentifierInfo("__VA_ARGS__"))->setIsPoisoned();
74
75 // Initialize the pragma handlers.
76 PragmaHandlers = new PragmaNamespace(0);
77 RegisterBuiltinPragmas();
78
79 // Initialize builtin macros like __LINE__ and friends.
80 RegisterBuiltinMacros();
81}
82
83Preprocessor::~Preprocessor() {
84 // Free any active lexers.
85 delete CurLexer;
86
87 while (!IncludeMacroStack.empty()) {
88 delete IncludeMacroStack.back().TheLexer;
Chris Lattner5b54ed92008-03-09 02:26:03 +000089 delete IncludeMacroStack.back().TheTokenLexer;
Chris Lattner4b009652007-07-25 00:24:17 +000090 IncludeMacroStack.pop_back();
91 }
Chris Lattner7a1b0882007-10-07 08:44:20 +000092
93 // Free any macro definitions.
94 for (llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator I =
95 Macros.begin(), E = Macros.end(); I != E; ++I) {
96 // Free the macro definition.
97 delete I->second;
98 I->second = 0;
99 I->first->setHasMacroDefinition(false);
100 }
Chris Lattner4b009652007-07-25 00:24:17 +0000101
102 // Free any cached macro expanders.
Chris Lattner5b54ed92008-03-09 02:26:03 +0000103 for (unsigned i = 0, e = NumCachedTokenLexers; i != e; ++i)
104 delete TokenLexerCache[i];
Chris Lattner4b009652007-07-25 00:24:17 +0000105
106 // Release pragma information.
107 delete PragmaHandlers;
108
109 // Delete the scratch buffer info.
110 delete ScratchBuf;
Chris Lattner65829812008-03-14 06:07:05 +0000111
112 delete Callbacks;
Chris Lattner4b009652007-07-25 00:24:17 +0000113}
114
Chris Lattner4b009652007-07-25 00:24:17 +0000115/// Diag - Forwarding function for diagnostics. This emits a diagnostic at
116/// the specified Token's location, translating the token's start
117/// position in the current buffer into a SourcePosition object for rendering.
118void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID) {
Ted Kremenekd7f64cd2007-12-12 22:39:36 +0000119 Diags.Report(getFullLoc(Loc), DiagID);
Chris Lattner4b009652007-07-25 00:24:17 +0000120}
121
122void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
123 const std::string &Msg) {
Ted Kremenekd7f64cd2007-12-12 22:39:36 +0000124 Diags.Report(getFullLoc(Loc), DiagID, &Msg, 1);
Chris Lattner4b009652007-07-25 00:24:17 +0000125}
126
Chris Lattnerbef45c52008-05-05 06:45:50 +0000127void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
128 const std::string &Msg,
129 const SourceRange &R1, const SourceRange &R2) {
130 SourceRange R[] = {R1, R2};
131 Diags.Report(getFullLoc(Loc), DiagID, &Msg, 1, R, 2);
132}
133
134
135void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
136 const SourceRange &R) {
137 Diags.Report(getFullLoc(Loc), DiagID, 0, 0, &R, 1);
138}
139
140void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
141 const SourceRange &R1, const SourceRange &R2) {
142 SourceRange R[] = {R1, R2};
143 Diags.Report(getFullLoc(Loc), DiagID, 0, 0, R, 2);
144}
145
146
Chris Lattner4b009652007-07-25 00:24:17 +0000147void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const {
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000148 llvm::cerr << tok::getTokenName(Tok.getKind()) << " '"
149 << getSpelling(Tok) << "'";
Chris Lattner4b009652007-07-25 00:24:17 +0000150
151 if (!DumpFlags) return;
Chris Lattnerc0f7c512007-12-09 20:31:55 +0000152
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000153 llvm::cerr << "\t";
Chris Lattner4b009652007-07-25 00:24:17 +0000154 if (Tok.isAtStartOfLine())
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000155 llvm::cerr << " [StartOfLine]";
Chris Lattner4b009652007-07-25 00:24:17 +0000156 if (Tok.hasLeadingSpace())
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000157 llvm::cerr << " [LeadingSpace]";
Chris Lattner4b009652007-07-25 00:24:17 +0000158 if (Tok.isExpandDisabled())
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000159 llvm::cerr << " [ExpandDisabled]";
Chris Lattner4b009652007-07-25 00:24:17 +0000160 if (Tok.needsCleaning()) {
161 const char *Start = SourceMgr.getCharacterData(Tok.getLocation());
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000162 llvm::cerr << " [UnClean='" << std::string(Start, Start+Tok.getLength())
163 << "']";
Chris Lattner4b009652007-07-25 00:24:17 +0000164 }
Chris Lattnerc0f7c512007-12-09 20:31:55 +0000165
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000166 llvm::cerr << "\tLoc=<";
Chris Lattnerc0f7c512007-12-09 20:31:55 +0000167 DumpLocation(Tok.getLocation());
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000168 llvm::cerr << ">";
Chris Lattnerc0f7c512007-12-09 20:31:55 +0000169}
170
171void Preprocessor::DumpLocation(SourceLocation Loc) const {
172 SourceLocation LogLoc = SourceMgr.getLogicalLoc(Loc);
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000173 llvm::cerr << SourceMgr.getSourceName(LogLoc) << ':'
174 << SourceMgr.getLineNumber(LogLoc) << ':'
175 << SourceMgr.getLineNumber(LogLoc);
Chris Lattnerc0f7c512007-12-09 20:31:55 +0000176
177 SourceLocation PhysLoc = SourceMgr.getPhysicalLoc(Loc);
178 if (PhysLoc != LogLoc) {
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000179 llvm::cerr << " <PhysLoc=";
Chris Lattnerc0f7c512007-12-09 20:31:55 +0000180 DumpLocation(PhysLoc);
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000181 llvm::cerr << ">";
Chris Lattnerc0f7c512007-12-09 20:31:55 +0000182 }
Chris Lattner4b009652007-07-25 00:24:17 +0000183}
184
185void Preprocessor::DumpMacro(const MacroInfo &MI) const {
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000186 llvm::cerr << "MACRO: ";
Chris Lattner4b009652007-07-25 00:24:17 +0000187 for (unsigned i = 0, e = MI.getNumTokens(); i != e; ++i) {
188 DumpToken(MI.getReplacementToken(i));
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000189 llvm::cerr << " ";
Chris Lattner4b009652007-07-25 00:24:17 +0000190 }
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000191 llvm::cerr << "\n";
Chris Lattner4b009652007-07-25 00:24:17 +0000192}
193
194void Preprocessor::PrintStats() {
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000195 llvm::cerr << "\n*** Preprocessor Stats:\n";
196 llvm::cerr << NumDirectives << " directives found:\n";
197 llvm::cerr << " " << NumDefined << " #define.\n";
198 llvm::cerr << " " << NumUndefined << " #undef.\n";
199 llvm::cerr << " #include/#include_next/#import:\n";
200 llvm::cerr << " " << NumEnteredSourceFiles << " source files entered.\n";
201 llvm::cerr << " " << MaxIncludeStackDepth << " max include stack depth\n";
202 llvm::cerr << " " << NumIf << " #if/#ifndef/#ifdef.\n";
203 llvm::cerr << " " << NumElse << " #else/#elif.\n";
204 llvm::cerr << " " << NumEndif << " #endif.\n";
205 llvm::cerr << " " << NumPragma << " #pragma.\n";
206 llvm::cerr << NumSkipped << " #if/#ifndef#ifdef regions skipped\n";
Chris Lattner4b009652007-07-25 00:24:17 +0000207
Ted Kremenekce4c64e2008-01-14 16:44:48 +0000208 llvm::cerr << NumMacroExpanded << "/" << NumFnMacroExpanded << "/"
209 << NumBuiltinMacroExpanded << " obj/fn/builtin macros expanded, "
210 << NumFastMacroExpanded << " on the fast path.\n";
211 llvm::cerr << (NumFastTokenPaste+NumTokenPaste)
212 << " token paste (##) operations performed, "
213 << NumFastTokenPaste << " on the fast path.\n";
Chris Lattner4b009652007-07-25 00:24:17 +0000214}
215
216//===----------------------------------------------------------------------===//
217// Token Spelling
218//===----------------------------------------------------------------------===//
219
220
221/// getSpelling() - Return the 'spelling' of this token. The spelling of a
222/// token are the characters used to represent the token in the source file
223/// after trigraph expansion and escaped-newline folding. In particular, this
224/// wants to get the true, uncanonicalized, spelling of things like digraphs
225/// UCNs, etc.
226std::string Preprocessor::getSpelling(const Token &Tok) const {
227 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
228
229 // If this token contains nothing interesting, return it directly.
230 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
231 if (!Tok.needsCleaning())
232 return std::string(TokStart, TokStart+Tok.getLength());
233
234 std::string Result;
235 Result.reserve(Tok.getLength());
236
237 // Otherwise, hard case, relex the characters into the string.
238 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
239 Ptr != End; ) {
240 unsigned CharSize;
241 Result.push_back(Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features));
242 Ptr += CharSize;
243 }
244 assert(Result.size() != unsigned(Tok.getLength()) &&
245 "NeedsCleaning flag set on something that didn't need cleaning!");
246 return Result;
247}
248
249/// getSpelling - This method is used to get the spelling of a token into a
250/// preallocated buffer, instead of as an std::string. The caller is required
251/// to allocate enough space for the token, which is guaranteed to be at least
252/// Tok.getLength() bytes long. The actual length of the token is returned.
253///
254/// Note that this method may do two possible things: it may either fill in
255/// the buffer specified with characters, or it may *change the input pointer*
256/// to point to a constant buffer with the data already in it (avoiding a
257/// copy). The caller is not allowed to modify the returned buffer pointer
258/// if an internal buffer is returned.
259unsigned Preprocessor::getSpelling(const Token &Tok,
260 const char *&Buffer) const {
261 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
262
263 // If this token is an identifier, just return the string from the identifier
264 // table, which is very quick.
265 if (const IdentifierInfo *II = Tok.getIdentifierInfo()) {
266 Buffer = II->getName();
267
268 // Return the length of the token. If the token needed cleaning, don't
269 // include the size of the newlines or trigraphs in it.
270 if (!Tok.needsCleaning())
271 return Tok.getLength();
272 else
273 return strlen(Buffer);
274 }
275
276 // Otherwise, compute the start of the token in the input lexer buffer.
277 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
278
279 // If this token contains nothing interesting, return it directly.
280 if (!Tok.needsCleaning()) {
281 Buffer = TokStart;
282 return Tok.getLength();
283 }
284 // Otherwise, hard case, relex the characters into the string.
285 char *OutBuf = const_cast<char*>(Buffer);
286 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
287 Ptr != End; ) {
288 unsigned CharSize;
289 *OutBuf++ = Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features);
290 Ptr += CharSize;
291 }
292 assert(unsigned(OutBuf-Buffer) != Tok.getLength() &&
293 "NeedsCleaning flag set on something that didn't need cleaning!");
294
295 return OutBuf-Buffer;
296}
297
298
299/// CreateString - Plop the specified string into a scratch buffer and return a
300/// location for it. If specified, the source location provides a source
301/// location for the token.
302SourceLocation Preprocessor::
303CreateString(const char *Buf, unsigned Len, SourceLocation SLoc) {
304 if (SLoc.isValid())
305 return ScratchBuf->getToken(Buf, Len, SLoc);
306 return ScratchBuf->getToken(Buf, Len);
307}
308
309
310/// AdvanceToTokenCharacter - Given a location that specifies the start of a
311/// token, return a new location that specifies a character within the token.
312SourceLocation Preprocessor::AdvanceToTokenCharacter(SourceLocation TokStart,
313 unsigned CharNo) {
314 // If they request the first char of the token, we're trivially done. If this
315 // is a macro expansion, it doesn't make sense to point to a character within
316 // the instantiation point (the name). We could point to the source
317 // character, but without also pointing to instantiation info, this is
318 // confusing.
319 if (CharNo == 0 || TokStart.isMacroID()) return TokStart;
320
321 // Figure out how many physical characters away the specified logical
322 // character is. This needs to take into consideration newlines and
323 // trigraphs.
324 const char *TokPtr = SourceMgr.getCharacterData(TokStart);
325 unsigned PhysOffset = 0;
326
327 // The usual case is that tokens don't contain anything interesting. Skip
328 // over the uninteresting characters. If a token only consists of simple
329 // chars, this method is extremely fast.
330 while (CharNo && Lexer::isObviouslySimpleCharacter(*TokPtr))
331 ++TokPtr, --CharNo, ++PhysOffset;
332
333 // If we have a character that may be a trigraph or escaped newline, create a
334 // lexer to parse it correctly.
335 if (CharNo != 0) {
336 // Create a lexer starting at this token position.
337 Lexer TheLexer(TokStart, *this, TokPtr);
338 Token Tok;
339 // Skip over characters the remaining characters.
340 const char *TokStartPtr = TokPtr;
341 for (; CharNo; --CharNo)
342 TheLexer.getAndAdvanceChar(TokPtr, Tok);
343
344 PhysOffset += TokPtr-TokStartPtr;
345 }
346
347 return TokStart.getFileLocWithOffset(PhysOffset);
348}
349
350
Chris Lattnerd1f21e12007-10-09 22:10:18 +0000351//===----------------------------------------------------------------------===//
352// Preprocessor Initialization Methods
353//===----------------------------------------------------------------------===//
354
355// Append a #define line to Buf for Macro. Macro should be of the form XXX,
356// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
357// "#define XXX Y z W". To get a #define with no value, use "XXX=".
358static void DefineBuiltinMacro(std::vector<char> &Buf, const char *Macro,
359 const char *Command = "#define ") {
360 Buf.insert(Buf.end(), Command, Command+strlen(Command));
361 if (const char *Equal = strchr(Macro, '=')) {
362 // Turn the = into ' '.
363 Buf.insert(Buf.end(), Macro, Equal);
364 Buf.push_back(' ');
365 Buf.insert(Buf.end(), Equal+1, Equal+strlen(Equal));
366 } else {
367 // Push "macroname 1".
368 Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
369 Buf.push_back(' ');
370 Buf.push_back('1');
371 }
372 Buf.push_back('\n');
373}
374
375
376static void InitializePredefinedMacros(Preprocessor &PP,
377 std::vector<char> &Buf) {
378 // FIXME: Implement magic like cpp_init_builtins for things like __STDC__
379 // and __DATE__ etc.
380#if 0
381 /* __STDC__ has the value 1 under normal circumstances.
382 However, if (a) we are in a system header, (b) the option
383 stdc_0_in_system_headers is true (set by target config), and
384 (c) we are not in strictly conforming mode, then it has the
385 value 0. (b) and (c) are already checked in cpp_init_builtins. */
386 //case BT_STDC:
387 if (cpp_in_system_header (pfile))
388 number = 0;
389 else
390 number = 1;
391 break;
392#endif
393 // These should all be defined in the preprocessor according to the
394 // current language configuration.
395 DefineBuiltinMacro(Buf, "__STDC__=1");
396 //DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
397 if (PP.getLangOptions().C99 && !PP.getLangOptions().CPlusPlus)
398 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199901L");
399 else if (0) // STDC94 ?
400 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199409L");
401
402 DefineBuiltinMacro(Buf, "__STDC_HOSTED__=1");
403 if (PP.getLangOptions().ObjC1)
404 DefineBuiltinMacro(Buf, "__OBJC__=1");
Steve Naroffae84af82007-10-31 18:42:27 +0000405
Chris Lattner77cec472007-10-10 17:48:53 +0000406 // Add __builtin_va_list typedef.
407 {
408 const char *VAList = PP.getTargetInfo().getVAListDeclaration();
409 Buf.insert(Buf.end(), VAList, VAList+strlen(VAList));
410 Buf.push_back('\n');
411 }
Chris Lattnerd1f21e12007-10-09 22:10:18 +0000412
413 // Get the target #defines.
414 PP.getTargetInfo().getTargetDefines(Buf);
415
416 // Compiler set macros.
417 DefineBuiltinMacro(Buf, "__APPLE_CC__=5250");
Steve Naroffb5a086e2007-11-10 18:06:36 +0000418 DefineBuiltinMacro(Buf, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__=1050");
Chris Lattnerd1f21e12007-10-09 22:10:18 +0000419 DefineBuiltinMacro(Buf, "__GNUC_MINOR__=0");
420 DefineBuiltinMacro(Buf, "__GNUC_PATCHLEVEL__=1");
421 DefineBuiltinMacro(Buf, "__GNUC__=4");
422 DefineBuiltinMacro(Buf, "__GXX_ABI_VERSION=1002");
423 DefineBuiltinMacro(Buf, "__VERSION__=\"4.0.1 (Apple Computer, Inc. "
424 "build 5250)\"");
425
426 // Build configuration options.
427 DefineBuiltinMacro(Buf, "__DYNAMIC__=1");
428 DefineBuiltinMacro(Buf, "__FINITE_MATH_ONLY__=0");
429 DefineBuiltinMacro(Buf, "__NO_INLINE__=1");
430 DefineBuiltinMacro(Buf, "__PIC__=1");
431
432
433 if (PP.getLangOptions().CPlusPlus) {
434 DefineBuiltinMacro(Buf, "__DEPRECATED=1");
435 DefineBuiltinMacro(Buf, "__EXCEPTIONS=1");
436 DefineBuiltinMacro(Buf, "__GNUG__=4");
437 DefineBuiltinMacro(Buf, "__GXX_WEAK__=1");
438 DefineBuiltinMacro(Buf, "__cplusplus=1");
439 DefineBuiltinMacro(Buf, "__private_extern__=extern");
440 }
Steve Naroff73a07032008-02-07 03:50:06 +0000441 if (PP.getLangOptions().Microsoft) {
442 DefineBuiltinMacro(Buf, "__stdcall=");
443 DefineBuiltinMacro(Buf, "__cdecl=");
444 DefineBuiltinMacro(Buf, "_cdecl=");
445 DefineBuiltinMacro(Buf, "__ptr64=");
Steve Naroffbe880ec2008-02-07 23:24:32 +0000446 DefineBuiltinMacro(Buf, "__w64=");
Steve Naroff73a07032008-02-07 03:50:06 +0000447 DefineBuiltinMacro(Buf, "__forceinline=");
Steve Narofff9bba132008-02-07 15:26:07 +0000448 DefineBuiltinMacro(Buf, "__int8=char");
449 DefineBuiltinMacro(Buf, "__int16=short");
450 DefineBuiltinMacro(Buf, "__int32=int");
Chris Lattnerd1a552b2008-02-10 21:12:45 +0000451 DefineBuiltinMacro(Buf, "__int64=long long");
Steve Naroffcfe78212008-02-11 22:29:58 +0000452 DefineBuiltinMacro(Buf, "__declspec(X)=");
Steve Naroff73a07032008-02-07 03:50:06 +0000453 }
Chris Lattnerd1f21e12007-10-09 22:10:18 +0000454 // FIXME: Should emit a #line directive here.
455}
456
457
458/// EnterMainSourceFile - Enter the specified FileID as the main source file,
Nate Begeman886bf132008-01-07 04:01:26 +0000459/// which implicitly adds the builtin defines etc.
Ted Kremenek17861c52007-12-19 22:51:13 +0000460void Preprocessor::EnterMainSourceFile() {
461
462 unsigned MainFileID = SourceMgr.getMainFileID();
463
Chris Lattnerd1f21e12007-10-09 22:10:18 +0000464 // Enter the main file source buffer.
465 EnterSourceFile(MainFileID, 0);
466
Chris Lattnerb45f05c2007-11-15 19:07:47 +0000467 // Tell the header info that the main file was entered. If the file is later
468 // #imported, it won't be re-entered.
469 if (const FileEntry *FE =
470 SourceMgr.getFileEntryForLoc(SourceLocation::getFileLoc(MainFileID, 0)))
471 HeaderInfo.IncrementIncludeCount(FE);
472
Chris Lattnerd1f21e12007-10-09 22:10:18 +0000473 std::vector<char> PrologFile;
474 PrologFile.reserve(4080);
475
476 // Install things like __POWERPC__, __GNUC__, etc into the macro table.
477 InitializePredefinedMacros(*this, PrologFile);
478
479 // Add on the predefines from the driver.
Chris Lattner47b6a162008-04-19 23:09:31 +0000480 PrologFile.insert(PrologFile.end(), Predefines.begin(), Predefines.end());
Chris Lattnerd1f21e12007-10-09 22:10:18 +0000481
482 // Memory buffer must end with a null byte!
483 PrologFile.push_back(0);
484
485 // Now that we have emitted the predefined macros, #includes, etc into
486 // PrologFile, preprocess it to populate the initial preprocessor state.
487 llvm::MemoryBuffer *SB =
488 llvm::MemoryBuffer::getMemBufferCopy(&PrologFile.front(),&PrologFile.back(),
489 "<predefines>");
490 assert(SB && "Cannot fail to create predefined source buffer");
491 unsigned FileID = SourceMgr.createFileIDForMemBuffer(SB);
492 assert(FileID && "Could not create FileID for predefines?");
493
494 // Start parsing the predefines.
495 EnterSourceFile(FileID, 0);
496}
Chris Lattner4b009652007-07-25 00:24:17 +0000497
Chris Lattner4b009652007-07-25 00:24:17 +0000498
499//===----------------------------------------------------------------------===//
500// Lexer Event Handling.
501//===----------------------------------------------------------------------===//
502
503/// LookUpIdentifierInfo - Given a tok::identifier token, look up the
504/// identifier information for the token and install it into the token.
505IdentifierInfo *Preprocessor::LookUpIdentifierInfo(Token &Identifier,
506 const char *BufPtr) {
Chris Lattnercb8e41c2007-10-09 18:02:16 +0000507 assert(Identifier.is(tok::identifier) && "Not an identifier!");
Chris Lattner4b009652007-07-25 00:24:17 +0000508 assert(Identifier.getIdentifierInfo() == 0 && "Identinfo already exists!");
509
510 // Look up this token, see if it is a macro, or if it is a language keyword.
511 IdentifierInfo *II;
512 if (BufPtr && !Identifier.needsCleaning()) {
513 // No cleaning needed, just use the characters from the lexed buffer.
514 II = getIdentifierInfo(BufPtr, BufPtr+Identifier.getLength());
515 } else {
516 // Cleaning needed, alloca a buffer, clean into it, then use the buffer.
517 llvm::SmallVector<char, 64> IdentifierBuffer;
518 IdentifierBuffer.resize(Identifier.getLength());
519 const char *TmpBuf = &IdentifierBuffer[0];
520 unsigned Size = getSpelling(Identifier, TmpBuf);
521 II = getIdentifierInfo(TmpBuf, TmpBuf+Size);
522 }
523 Identifier.setIdentifierInfo(II);
524 return II;
525}
526
527
528/// HandleIdentifier - This callback is invoked when the lexer reads an
529/// identifier. This callback looks up the identifier in the map and/or
530/// potentially macro expands it or turns it into a named token (like 'for').
531void Preprocessor::HandleIdentifier(Token &Identifier) {
532 assert(Identifier.getIdentifierInfo() &&
533 "Can't handle identifiers without identifier info!");
534
535 IdentifierInfo &II = *Identifier.getIdentifierInfo();
536
537 // If this identifier was poisoned, and if it was not produced from a macro
538 // expansion, emit an error.
539 if (II.isPoisoned() && CurLexer) {
540 if (&II != Ident__VA_ARGS__) // We warn about __VA_ARGS__ with poisoning.
541 Diag(Identifier, diag::err_pp_used_poisoned_id);
542 else
543 Diag(Identifier, diag::ext_pp_bad_vaargs_use);
544 }
545
546 // If this is a macro to be expanded, do it.
Chris Lattner7a1b0882007-10-07 08:44:20 +0000547 if (MacroInfo *MI = getMacroInfo(&II)) {
Chris Lattner4b009652007-07-25 00:24:17 +0000548 if (!DisableMacroExpansion && !Identifier.isExpandDisabled()) {
549 if (MI->isEnabled()) {
550 if (!HandleMacroExpandedIdentifier(Identifier, MI))
551 return;
552 } else {
553 // C99 6.10.3.4p2 says that a disabled macro may never again be
554 // expanded, even if it's in a context where it could be expanded in the
555 // future.
556 Identifier.setFlag(Token::DisableExpand);
557 }
558 }
Chris Lattner4b009652007-07-25 00:24:17 +0000559 }
560
561 // C++ 2.11p2: If this is an alternative representation of a C++ operator,
562 // then we act as if it is the actual operator and not the textual
563 // representation of it.
564 if (II.isCPlusPlusOperatorKeyword())
565 Identifier.setIdentifierInfo(0);
566
567 // Change the kind of this identifier to the appropriate token kind, e.g.
568 // turning "for" into a keyword.
569 Identifier.setKind(II.getTokenID());
570
571 // If this is an extension token, diagnose its use.
572 // FIXME: tried (unsuccesfully) to shut this up when compiling with gnu99
573 // For now, I'm just commenting it out (while I work on attributes).
574 if (II.isExtensionToken() && Features.C99)
575 Diag(Identifier, diag::ext_token_used);
576}
577