blob: d2630584a59811e18e58002c0176bc5f5ac76eac [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//
5// This file was developed by Chris Lattner and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
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 Lattnerb8d6d5a2006-11-21 04:09:30 +000031#include "clang/Lex/PPCallbacks.h"
Chris Lattnerb8761832006-06-24 21:31:03 +000032#include "clang/Lex/Pragma.h"
Chris Lattner0b8cfc22006-06-28 06:49:17 +000033#include "clang/Lex/ScratchBuffer.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000034#include "clang/Basic/Diagnostic.h"
35#include "clang/Basic/FileManager.h"
36#include "clang/Basic/SourceManager.h"
Chris Lattner81278c62006-10-14 19:03:49 +000037#include "clang/Basic/TargetInfo.h"
Chris Lattner7a4af3b2006-07-26 06:26:52 +000038#include "llvm/ADT/SmallVector.h"
Chris Lattner8a7003c2007-07-16 06:48:38 +000039#include "llvm/Support/MemoryBuffer.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000040#include <iostream>
Chris Lattnera2633932007-09-03 18:30:32 +000041#include <ctime>
Chris Lattner22eb9722006-06-18 05:43:12 +000042using namespace clang;
43
44//===----------------------------------------------------------------------===//
45
Chris Lattner02dffbd2006-10-14 07:50:21 +000046Preprocessor::Preprocessor(Diagnostic &diags, const LangOptions &opts,
Chris Lattnerad7cdd32006-11-21 06:08:20 +000047 TargetInfo &target, SourceManager &SM,
Chris Lattner59a9ebd2006-10-18 05:34:33 +000048 HeaderSearch &Headers)
Chris Lattnerad7cdd32006-11-21 06:08:20 +000049 : Diags(diags), Features(opts), Target(target), FileMgr(Headers.getFileMgr()),
50 SourceMgr(SM), HeaderInfo(Headers), Identifiers(opts),
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +000051 CurLexer(0), CurDirLookup(0), CurMacroExpander(0), Callbacks(0) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +000052 ScratchBuf = new ScratchBuffer(SourceMgr);
Chris Lattnerc02c4ab2007-07-15 00:25:26 +000053
Chris Lattner22eb9722006-06-18 05:43:12 +000054 // Clear stats.
Chris Lattner59a9ebd2006-10-18 05:34:33 +000055 NumDirectives = NumDefined = NumUndefined = NumPragma = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +000056 NumIf = NumElse = NumEndif = 0;
Chris Lattner78186052006-07-09 00:45:31 +000057 NumEnteredSourceFiles = 0;
58 NumMacroExpanded = NumFnMacroExpanded = NumBuiltinMacroExpanded = 0;
Chris Lattner510ab612006-07-20 04:47:30 +000059 NumFastMacroExpanded = NumTokenPaste = NumFastTokenPaste = 0;
Chris Lattner59a9ebd2006-10-18 05:34:33 +000060 MaxIncludeStackDepth = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +000061 NumSkipped = 0;
Chris Lattnerb352e3e2006-11-21 06:17:10 +000062
63 // Default to discarding comments.
64 KeepComments = false;
65 KeepMacroComments = false;
66
Chris Lattner22eb9722006-06-18 05:43:12 +000067 // Macro expansion is enabled.
68 DisableMacroExpansion = false;
Chris Lattneree8760b2006-07-15 07:42:55 +000069 InMacroArgs = false;
Chris Lattnerc02c4ab2007-07-15 00:25:26 +000070 NumCachedMacroExpanders = 0;
Chris Lattner0c885f52006-06-21 06:50:18 +000071
Chris Lattner8ff71992006-07-06 05:17:39 +000072 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
73 // This gets unpoisoned where it is allowed.
74 (Ident__VA_ARGS__ = getIdentifierInfo("__VA_ARGS__"))->setIsPoisoned();
75
Chris Lattner1f1b0db2007-10-09 22:10:18 +000076 Predefines = 0;
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;
92 delete IncludeMacroStack.back().TheMacroExpander;
93 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.
106 for (unsigned i = 0, e = NumCachedMacroExpanders; i != e; ++i)
107 delete MacroExpanderCache[i];
108
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 Lattner22eb9722006-06-18 05:43:12 +0000114}
115
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000116PPCallbacks::~PPCallbacks() {
117}
Chris Lattner87d3bec2006-10-17 03:44:32 +0000118
Chris Lattner22eb9722006-06-18 05:43:12 +0000119/// Diag - Forwarding function for diagnostics. This emits a diagnostic at
Chris Lattner146762e2007-07-20 16:59:19 +0000120/// the specified Token's location, translating the token's start
Chris Lattner22eb9722006-06-18 05:43:12 +0000121/// position in the current buffer into a SourcePosition object for rendering.
Chris Lattner36982e42007-05-16 17:49:37 +0000122void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID) {
123 Diags.Report(Loc, DiagID);
124}
125
Chris Lattnercb283342006-06-18 06:48:37 +0000126void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
Chris Lattner22eb9722006-06-18 05:43:12 +0000127 const std::string &Msg) {
Chris Lattner36982e42007-05-16 17:49:37 +0000128 Diags.Report(Loc, DiagID, &Msg, 1);
Chris Lattner22eb9722006-06-18 05:43:12 +0000129}
Chris Lattnerd01e2912006-06-18 16:22:51 +0000130
Chris Lattner146762e2007-07-20 16:59:19 +0000131void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000132 std::cerr << tok::getTokenName(Tok.getKind()) << " '"
133 << getSpelling(Tok) << "'";
134
135 if (!DumpFlags) return;
Chris Lattner615315f2007-12-09 20:31:55 +0000136
Chris Lattnerd01e2912006-06-18 16:22:51 +0000137 std::cerr << "\t";
138 if (Tok.isAtStartOfLine())
139 std::cerr << " [StartOfLine]";
140 if (Tok.hasLeadingSpace())
141 std::cerr << " [LeadingSpace]";
Chris Lattner6e4bf522006-07-27 06:59:25 +0000142 if (Tok.isExpandDisabled())
143 std::cerr << " [ExpandDisabled]";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000144 if (Tok.needsCleaning()) {
Chris Lattner50b497e2006-06-18 16:32:35 +0000145 const char *Start = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000146 std::cerr << " [UnClean='" << std::string(Start, Start+Tok.getLength())
147 << "']";
148 }
Chris Lattner615315f2007-12-09 20:31:55 +0000149
150 std::cerr << "\tLoc=<";
151 DumpLocation(Tok.getLocation());
152 std::cerr << ">";
153}
154
155void Preprocessor::DumpLocation(SourceLocation Loc) const {
156 SourceLocation LogLoc = SourceMgr.getLogicalLoc(Loc);
157 std::cerr << SourceMgr.getSourceName(LogLoc) << ':'
158 << SourceMgr.getLineNumber(LogLoc) << ':'
159 << SourceMgr.getLineNumber(LogLoc);
160
161 SourceLocation PhysLoc = SourceMgr.getPhysicalLoc(Loc);
162 if (PhysLoc != LogLoc) {
163 std::cerr << " <PhysLoc=";
164 DumpLocation(PhysLoc);
165 std::cerr << ">";
166 }
Chris Lattnerd01e2912006-06-18 16:22:51 +0000167}
168
169void Preprocessor::DumpMacro(const MacroInfo &MI) const {
170 std::cerr << "MACRO: ";
171 for (unsigned i = 0, e = MI.getNumTokens(); i != e; ++i) {
172 DumpToken(MI.getReplacementToken(i));
173 std::cerr << " ";
174 }
175 std::cerr << "\n";
176}
177
Chris Lattner22eb9722006-06-18 05:43:12 +0000178void Preprocessor::PrintStats() {
179 std::cerr << "\n*** Preprocessor Stats:\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000180 std::cerr << NumDirectives << " directives found:\n";
181 std::cerr << " " << NumDefined << " #define.\n";
182 std::cerr << " " << NumUndefined << " #undef.\n";
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000183 std::cerr << " #include/#include_next/#import:\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000184 std::cerr << " " << NumEnteredSourceFiles << " source files entered.\n";
185 std::cerr << " " << MaxIncludeStackDepth << " max include stack depth\n";
186 std::cerr << " " << NumIf << " #if/#ifndef/#ifdef.\n";
187 std::cerr << " " << NumElse << " #else/#elif.\n";
188 std::cerr << " " << NumEndif << " #endif.\n";
189 std::cerr << " " << NumPragma << " #pragma.\n";
190 std::cerr << NumSkipped << " #if/#ifndef#ifdef regions skipped\n";
191
Chris Lattner78186052006-07-09 00:45:31 +0000192 std::cerr << NumMacroExpanded << "/" << NumFnMacroExpanded << "/"
193 << NumBuiltinMacroExpanded << " obj/fn/builtin macros expanded, "
Chris Lattner22eb9722006-06-18 05:43:12 +0000194 << NumFastMacroExpanded << " on the fast path.\n";
Chris Lattner510ab612006-07-20 04:47:30 +0000195 std::cerr << (NumFastTokenPaste+NumTokenPaste)
196 << " token paste (##) operations performed, "
197 << NumFastTokenPaste << " on the fast path.\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000198}
199
200//===----------------------------------------------------------------------===//
Chris Lattnerd01e2912006-06-18 16:22:51 +0000201// Token Spelling
202//===----------------------------------------------------------------------===//
203
204
205/// getSpelling() - Return the 'spelling' of this token. The spelling of a
206/// token are the characters used to represent the token in the source file
207/// after trigraph expansion and escaped-newline folding. In particular, this
208/// wants to get the true, uncanonicalized, spelling of things like digraphs
209/// UCNs, etc.
Chris Lattner146762e2007-07-20 16:59:19 +0000210std::string Preprocessor::getSpelling(const Token &Tok) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000211 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
212
213 // If this token contains nothing interesting, return it directly.
Chris Lattner50b497e2006-06-18 16:32:35 +0000214 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000215 if (!Tok.needsCleaning())
216 return std::string(TokStart, TokStart+Tok.getLength());
217
Chris Lattnerd01e2912006-06-18 16:22:51 +0000218 std::string Result;
219 Result.reserve(Tok.getLength());
220
Chris Lattneref9eae12006-07-04 22:33:12 +0000221 // Otherwise, hard case, relex the characters into the string.
Chris Lattnerd01e2912006-06-18 16:22:51 +0000222 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
223 Ptr != End; ) {
224 unsigned CharSize;
225 Result.push_back(Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features));
226 Ptr += CharSize;
227 }
228 assert(Result.size() != unsigned(Tok.getLength()) &&
229 "NeedsCleaning flag set on something that didn't need cleaning!");
230 return Result;
231}
232
233/// getSpelling - This method is used to get the spelling of a token into a
234/// preallocated buffer, instead of as an std::string. The caller is required
235/// to allocate enough space for the token, which is guaranteed to be at least
236/// Tok.getLength() bytes long. The actual length of the token is returned.
Chris Lattneref9eae12006-07-04 22:33:12 +0000237///
238/// Note that this method may do two possible things: it may either fill in
239/// the buffer specified with characters, or it may *change the input pointer*
240/// to point to a constant buffer with the data already in it (avoiding a
241/// copy). The caller is not allowed to modify the returned buffer pointer
242/// if an internal buffer is returned.
Chris Lattner146762e2007-07-20 16:59:19 +0000243unsigned Preprocessor::getSpelling(const Token &Tok,
Chris Lattneref9eae12006-07-04 22:33:12 +0000244 const char *&Buffer) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000245 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
246
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000247 // If this token is an identifier, just return the string from the identifier
248 // table, which is very quick.
249 if (const IdentifierInfo *II = Tok.getIdentifierInfo()) {
250 Buffer = II->getName();
Chris Lattner32e6d642007-07-22 22:50:09 +0000251
252 // Return the length of the token. If the token needed cleaning, don't
253 // include the size of the newlines or trigraphs in it.
254 if (!Tok.needsCleaning())
255 return Tok.getLength();
256 else
257 return strlen(Buffer);
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000258 }
259
260 // Otherwise, compute the start of the token in the input lexer buffer.
Chris Lattner50b497e2006-06-18 16:32:35 +0000261 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000262
263 // If this token contains nothing interesting, return it directly.
264 if (!Tok.needsCleaning()) {
Chris Lattneref9eae12006-07-04 22:33:12 +0000265 Buffer = TokStart;
266 return Tok.getLength();
Chris Lattnerd01e2912006-06-18 16:22:51 +0000267 }
268 // Otherwise, hard case, relex the characters into the string.
Chris Lattneref9eae12006-07-04 22:33:12 +0000269 char *OutBuf = const_cast<char*>(Buffer);
Chris Lattnerd01e2912006-06-18 16:22:51 +0000270 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
271 Ptr != End; ) {
272 unsigned CharSize;
273 *OutBuf++ = Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features);
274 Ptr += CharSize;
275 }
276 assert(unsigned(OutBuf-Buffer) != Tok.getLength() &&
277 "NeedsCleaning flag set on something that didn't need cleaning!");
278
279 return OutBuf-Buffer;
280}
281
Chris Lattnerb94ec7b2006-07-14 06:54:10 +0000282
283/// CreateString - Plop the specified string into a scratch buffer and return a
284/// location for it. If specified, the source location provides a source
285/// location for the token.
286SourceLocation Preprocessor::
287CreateString(const char *Buf, unsigned Len, SourceLocation SLoc) {
288 if (SLoc.isValid())
289 return ScratchBuf->getToken(Buf, Len, SLoc);
290 return ScratchBuf->getToken(Buf, Len);
291}
292
293
Chris Lattner8a7003c2007-07-16 06:48:38 +0000294/// AdvanceToTokenCharacter - Given a location that specifies the start of a
295/// token, return a new location that specifies a character within the token.
296SourceLocation Preprocessor::AdvanceToTokenCharacter(SourceLocation TokStart,
297 unsigned CharNo) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000298 // If they request the first char of the token, we're trivially done. If this
299 // is a macro expansion, it doesn't make sense to point to a character within
300 // the instantiation point (the name). We could point to the source
301 // character, but without also pointing to instantiation info, this is
302 // confusing.
303 if (CharNo == 0 || TokStart.isMacroID()) return TokStart;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000304
305 // Figure out how many physical characters away the specified logical
306 // character is. This needs to take into consideration newlines and
307 // trigraphs.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000308 const char *TokPtr = SourceMgr.getCharacterData(TokStart);
309 unsigned PhysOffset = 0;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000310
311 // The usual case is that tokens don't contain anything interesting. Skip
312 // over the uninteresting characters. If a token only consists of simple
313 // chars, this method is extremely fast.
314 while (CharNo && Lexer::isObviouslySimpleCharacter(*TokPtr))
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000315 ++TokPtr, --CharNo, ++PhysOffset;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000316
317 // If we have a character that may be a trigraph or escaped newline, create a
318 // lexer to parse it correctly.
Chris Lattner8a7003c2007-07-16 06:48:38 +0000319 if (CharNo != 0) {
320 // Create a lexer starting at this token position.
Chris Lattner77e9de52007-07-20 16:52:03 +0000321 Lexer TheLexer(TokStart, *this, TokPtr);
Chris Lattner146762e2007-07-20 16:59:19 +0000322 Token Tok;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000323 // Skip over characters the remaining characters.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000324 const char *TokStartPtr = TokPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000325 for (; CharNo; --CharNo)
326 TheLexer.getAndAdvanceChar(TokPtr, Tok);
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000327
328 PhysOffset += TokPtr-TokStartPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000329 }
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000330
331 return TokStart.getFileLocWithOffset(PhysOffset);
Chris Lattner8a7003c2007-07-16 06:48:38 +0000332}
333
334
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000335//===----------------------------------------------------------------------===//
336// Preprocessor Initialization Methods
337//===----------------------------------------------------------------------===//
338
339// Append a #define line to Buf for Macro. Macro should be of the form XXX,
340// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
341// "#define XXX Y z W". To get a #define with no value, use "XXX=".
342static void DefineBuiltinMacro(std::vector<char> &Buf, const char *Macro,
343 const char *Command = "#define ") {
344 Buf.insert(Buf.end(), Command, Command+strlen(Command));
345 if (const char *Equal = strchr(Macro, '=')) {
346 // Turn the = into ' '.
347 Buf.insert(Buf.end(), Macro, Equal);
348 Buf.push_back(' ');
349 Buf.insert(Buf.end(), Equal+1, Equal+strlen(Equal));
350 } else {
351 // Push "macroname 1".
352 Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
353 Buf.push_back(' ');
354 Buf.push_back('1');
355 }
356 Buf.push_back('\n');
357}
358
359
360static void InitializePredefinedMacros(Preprocessor &PP,
361 std::vector<char> &Buf) {
362 // FIXME: Implement magic like cpp_init_builtins for things like __STDC__
363 // and __DATE__ etc.
364#if 0
365 /* __STDC__ has the value 1 under normal circumstances.
366 However, if (a) we are in a system header, (b) the option
367 stdc_0_in_system_headers is true (set by target config), and
368 (c) we are not in strictly conforming mode, then it has the
369 value 0. (b) and (c) are already checked in cpp_init_builtins. */
370 //case BT_STDC:
371 if (cpp_in_system_header (pfile))
372 number = 0;
373 else
374 number = 1;
375 break;
376#endif
377 // These should all be defined in the preprocessor according to the
378 // current language configuration.
379 DefineBuiltinMacro(Buf, "__STDC__=1");
380 //DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
381 if (PP.getLangOptions().C99 && !PP.getLangOptions().CPlusPlus)
382 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199901L");
383 else if (0) // STDC94 ?
384 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199409L");
385
386 DefineBuiltinMacro(Buf, "__STDC_HOSTED__=1");
387 if (PP.getLangOptions().ObjC1)
388 DefineBuiltinMacro(Buf, "__OBJC__=1");
389 if (PP.getLangOptions().ObjC2)
390 DefineBuiltinMacro(Buf, "__OBJC2__=1");
Steve Naroff6d40db02007-10-31 18:42:27 +0000391
Chris Lattnered2a9eb2007-10-10 17:48:53 +0000392 // Add __builtin_va_list typedef.
393 {
394 const char *VAList = PP.getTargetInfo().getVAListDeclaration();
395 Buf.insert(Buf.end(), VAList, VAList+strlen(VAList));
396 Buf.push_back('\n');
397 }
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000398
399 // Get the target #defines.
400 PP.getTargetInfo().getTargetDefines(Buf);
401
402 // Compiler set macros.
403 DefineBuiltinMacro(Buf, "__APPLE_CC__=5250");
Steve Naroff68754c52007-11-10 18:06:36 +0000404 DefineBuiltinMacro(Buf, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__=1050");
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000405 DefineBuiltinMacro(Buf, "__GNUC_MINOR__=0");
406 DefineBuiltinMacro(Buf, "__GNUC_PATCHLEVEL__=1");
407 DefineBuiltinMacro(Buf, "__GNUC__=4");
408 DefineBuiltinMacro(Buf, "__GXX_ABI_VERSION=1002");
409 DefineBuiltinMacro(Buf, "__VERSION__=\"4.0.1 (Apple Computer, Inc. "
410 "build 5250)\"");
411
412 // Build configuration options.
413 DefineBuiltinMacro(Buf, "__DYNAMIC__=1");
414 DefineBuiltinMacro(Buf, "__FINITE_MATH_ONLY__=0");
415 DefineBuiltinMacro(Buf, "__NO_INLINE__=1");
416 DefineBuiltinMacro(Buf, "__PIC__=1");
417
418
419 if (PP.getLangOptions().CPlusPlus) {
420 DefineBuiltinMacro(Buf, "__DEPRECATED=1");
421 DefineBuiltinMacro(Buf, "__EXCEPTIONS=1");
422 DefineBuiltinMacro(Buf, "__GNUG__=4");
423 DefineBuiltinMacro(Buf, "__GXX_WEAK__=1");
424 DefineBuiltinMacro(Buf, "__cplusplus=1");
425 DefineBuiltinMacro(Buf, "__private_extern__=extern");
426 }
427
428 // FIXME: Should emit a #line directive here.
429}
430
431
432/// EnterMainSourceFile - Enter the specified FileID as the main source file,
433/// which implicitly adds the builting defines etc.
434void Preprocessor::EnterMainSourceFile(unsigned MainFileID) {
435 // Enter the main file source buffer.
436 EnterSourceFile(MainFileID, 0);
437
Chris Lattner609d4132007-11-15 19:07:47 +0000438 // Tell the header info that the main file was entered. If the file is later
439 // #imported, it won't be re-entered.
440 if (const FileEntry *FE =
441 SourceMgr.getFileEntryForLoc(SourceLocation::getFileLoc(MainFileID, 0)))
442 HeaderInfo.IncrementIncludeCount(FE);
443
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000444 std::vector<char> PrologFile;
445 PrologFile.reserve(4080);
446
447 // Install things like __POWERPC__, __GNUC__, etc into the macro table.
448 InitializePredefinedMacros(*this, PrologFile);
449
450 // Add on the predefines from the driver.
451 PrologFile.insert(PrologFile.end(), Predefines,Predefines+strlen(Predefines));
452
453 // Memory buffer must end with a null byte!
454 PrologFile.push_back(0);
455
456 // Now that we have emitted the predefined macros, #includes, etc into
457 // PrologFile, preprocess it to populate the initial preprocessor state.
458 llvm::MemoryBuffer *SB =
459 llvm::MemoryBuffer::getMemBufferCopy(&PrologFile.front(),&PrologFile.back(),
460 "<predefines>");
461 assert(SB && "Cannot fail to create predefined source buffer");
462 unsigned FileID = SourceMgr.createFileIDForMemBuffer(SB);
463 assert(FileID && "Could not create FileID for predefines?");
464
465 // Start parsing the predefines.
466 EnterSourceFile(FileID, 0);
467}
Chris Lattner8a7003c2007-07-16 06:48:38 +0000468
Chris Lattnerd01e2912006-06-18 16:22:51 +0000469//===----------------------------------------------------------------------===//
Chris Lattner22eb9722006-06-18 05:43:12 +0000470// Source File Location Methods.
471//===----------------------------------------------------------------------===//
472
Chris Lattner22eb9722006-06-18 05:43:12 +0000473/// LookupFile - Given a "foo" or <foo> reference, look up the indicated file,
474/// return null on failure. isAngled indicates whether the file reference is
475/// for system #include's or not (i.e. using <> instead of "").
Chris Lattnerb8b94f12006-10-30 05:38:06 +0000476const FileEntry *Preprocessor::LookupFile(const char *FilenameStart,
477 const char *FilenameEnd,
Chris Lattnerc8997182006-06-22 05:52:16 +0000478 bool isAngled,
Chris Lattner22eb9722006-06-18 05:43:12 +0000479 const DirectoryLookup *FromDir,
Chris Lattnerc8997182006-06-22 05:52:16 +0000480 const DirectoryLookup *&CurDir) {
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000481 // If the header lookup mechanism may be relative to the current file, pass in
482 // info about where the current file is.
483 const FileEntry *CurFileEnt = 0;
Chris Lattner63dd32b2006-10-20 04:42:40 +0000484 if (!FromDir) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000485 SourceLocation FileLoc = getCurrentFileLexer()->getFileLoc();
486 CurFileEnt = SourceMgr.getFileEntryForLoc(FileLoc);
Chris Lattner22eb9722006-06-18 05:43:12 +0000487 }
488
Chris Lattner63dd32b2006-10-20 04:42:40 +0000489 // Do a standard file entry lookup.
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000490 CurDir = CurDirLookup;
Chris Lattner63dd32b2006-10-20 04:42:40 +0000491 const FileEntry *FE =
Chris Lattner7cdbad92006-10-30 05:33:15 +0000492 HeaderInfo.LookupFile(FilenameStart, FilenameEnd,
493 isAngled, FromDir, CurDir, CurFileEnt);
Chris Lattner63dd32b2006-10-20 04:42:40 +0000494 if (FE) return FE;
495
496 // Otherwise, see if this is a subframework header. If so, this is relative
497 // to one of the headers on the #include stack. Walk the list of the current
498 // headers on the #include stack and pass them to HeaderInfo.
Chris Lattner5c683b22006-10-20 05:12:14 +0000499 if (CurLexer && !CurLexer->Is_PragmaLexer) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000500 CurFileEnt = SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc());
Chris Lattner7cdbad92006-10-30 05:33:15 +0000501 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
502 CurFileEnt)))
Chris Lattner63dd32b2006-10-20 04:42:40 +0000503 return FE;
504 }
505
506 for (unsigned i = 0, e = IncludeMacroStack.size(); i != e; ++i) {
507 IncludeStackInfo &ISEntry = IncludeMacroStack[e-i-1];
Chris Lattner5c683b22006-10-20 05:12:14 +0000508 if (ISEntry.TheLexer && !ISEntry.TheLexer->Is_PragmaLexer) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000509 CurFileEnt = SourceMgr.getFileEntryForLoc(ISEntry.TheLexer->getFileLoc());
Chris Lattner7cdbad92006-10-30 05:33:15 +0000510 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
511 CurFileEnt)))
Chris Lattner63dd32b2006-10-20 04:42:40 +0000512 return FE;
513 }
514 }
515
516 // Otherwise, we really couldn't find the file.
517 return 0;
Chris Lattner22eb9722006-06-18 05:43:12 +0000518}
519
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000520/// isInPrimaryFile - Return true if we're in the top-level file, not in a
521/// #include.
522bool Preprocessor::isInPrimaryFile() const {
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000523 if (CurLexer && !CurLexer->Is_PragmaLexer)
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000524 return IncludeMacroStack.empty();
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000525
Chris Lattner13044d92006-07-03 05:16:44 +0000526 // If there are any stacked lexers, we're in a #include.
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000527 assert(IncludeMacroStack[0].TheLexer &&
528 !IncludeMacroStack[0].TheLexer->Is_PragmaLexer &&
529 "Top level include stack isn't our primary lexer?");
530 for (unsigned i = 1, e = IncludeMacroStack.size(); i != e; ++i)
Chris Lattner13044d92006-07-03 05:16:44 +0000531 if (IncludeMacroStack[i].TheLexer &&
532 !IncludeMacroStack[i].TheLexer->Is_PragmaLexer)
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000533 return false;
534 return true;
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000535}
536
537/// getCurrentLexer - Return the current file lexer being lexed from. Note
538/// that this ignores any potentially active macro expansions and _Pragma
539/// expansions going on at the time.
540Lexer *Preprocessor::getCurrentFileLexer() const {
541 if (CurLexer && !CurLexer->Is_PragmaLexer) return CurLexer;
542
543 // Look for a stacked lexer.
544 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
Chris Lattnerf88c53a2006-07-03 05:26:05 +0000545 Lexer *L = IncludeMacroStack[i-1].TheLexer;
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000546 if (L && !L->Is_PragmaLexer) // Ignore macro & _Pragma expansions.
547 return L;
548 }
549 return 0;
550}
551
552
Chris Lattner22eb9722006-06-18 05:43:12 +0000553/// EnterSourceFile - Add a source file to the top of the include stack and
554/// start lexing tokens from it instead of the current buffer. Return true
555/// on failure.
556void Preprocessor::EnterSourceFile(unsigned FileID,
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000557 const DirectoryLookup *CurDir) {
Chris Lattner69772b02006-07-02 20:34:39 +0000558 assert(CurMacroExpander == 0 && "Cannot #include a file inside a macro!");
Chris Lattner22eb9722006-06-18 05:43:12 +0000559 ++NumEnteredSourceFiles;
560
Chris Lattner69772b02006-07-02 20:34:39 +0000561 if (MaxIncludeStackDepth < IncludeMacroStack.size())
562 MaxIncludeStackDepth = IncludeMacroStack.size();
Chris Lattner22eb9722006-06-18 05:43:12 +0000563
Chris Lattner77e9de52007-07-20 16:52:03 +0000564 Lexer *TheLexer = new Lexer(SourceLocation::getFileLoc(FileID, 0), *this);
Chris Lattner69772b02006-07-02 20:34:39 +0000565 EnterSourceFileWithLexer(TheLexer, CurDir);
566}
Chris Lattner22eb9722006-06-18 05:43:12 +0000567
Chris Lattner69772b02006-07-02 20:34:39 +0000568/// EnterSourceFile - Add a source file to the top of the include stack and
569/// start lexing tokens from it instead of the current buffer.
570void Preprocessor::EnterSourceFileWithLexer(Lexer *TheLexer,
571 const DirectoryLookup *CurDir) {
572
573 // Add the current lexer to the include stack.
574 if (CurLexer || CurMacroExpander)
575 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
576 CurMacroExpander));
577
578 CurLexer = TheLexer;
Chris Lattnerc8997182006-06-22 05:52:16 +0000579 CurDirLookup = CurDir;
Chris Lattner69772b02006-07-02 20:34:39 +0000580 CurMacroExpander = 0;
Chris Lattner0c885f52006-06-21 06:50:18 +0000581
582 // Notify the client, if desired, that we are in a new source file.
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000583 if (Callbacks && !CurLexer->Is_PragmaLexer) {
Chris Lattnerc8997182006-06-22 05:52:16 +0000584 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
585
586 // Get the file entry for the current file.
587 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000588 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000589 FileType = HeaderInfo.getFileDirFlavor(FE);
Chris Lattnerc8997182006-06-22 05:52:16 +0000590
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000591 Callbacks->FileChanged(CurLexer->getFileLoc(),
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000592 PPCallbacks::EnterFile, FileType);
Chris Lattnerc8997182006-06-22 05:52:16 +0000593 }
Chris Lattner22eb9722006-06-18 05:43:12 +0000594}
595
Chris Lattner69772b02006-07-02 20:34:39 +0000596
597
Chris Lattner22eb9722006-06-18 05:43:12 +0000598/// EnterMacro - Add a Macro to the top of the include stack and start lexing
Chris Lattnercb283342006-06-18 06:48:37 +0000599/// tokens from it instead of the current buffer.
Chris Lattner146762e2007-07-20 16:59:19 +0000600void Preprocessor::EnterMacro(Token &Tok, MacroArgs *Args) {
Chris Lattner69772b02006-07-02 20:34:39 +0000601 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
602 CurMacroExpander));
603 CurLexer = 0;
604 CurDirLookup = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +0000605
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000606 if (NumCachedMacroExpanders == 0) {
607 CurMacroExpander = new MacroExpander(Tok, Args, *this);
608 } else {
609 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
610 CurMacroExpander->Init(Tok, Args);
611 }
Chris Lattner22eb9722006-06-18 05:43:12 +0000612}
613
Chris Lattner7667d0d2006-07-16 18:16:58 +0000614/// EnterTokenStream - Add a "macro" context to the top of the include stack,
615/// which will cause the lexer to start returning the specified tokens. Note
616/// that these tokens will be re-macro-expanded when/if expansion is enabled.
617/// This method assumes that the specified stream of tokens has a permanent
618/// owner somewhere, so they do not need to be copied.
Chris Lattner146762e2007-07-20 16:59:19 +0000619void Preprocessor::EnterTokenStream(const Token *Toks, unsigned NumToks) {
Chris Lattner7667d0d2006-07-16 18:16:58 +0000620 // Save our current state.
621 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
622 CurMacroExpander));
623 CurLexer = 0;
624 CurDirLookup = 0;
625
626 // Create a macro expander to expand from the specified token stream.
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000627 if (NumCachedMacroExpanders == 0) {
628 CurMacroExpander = new MacroExpander(Toks, NumToks, *this);
629 } else {
630 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
631 CurMacroExpander->Init(Toks, NumToks);
632 }
Chris Lattner7667d0d2006-07-16 18:16:58 +0000633}
634
635/// RemoveTopOfLexerStack - Pop the current lexer/macro exp off the top of the
636/// lexer stack. This should only be used in situations where the current
637/// state of the top-of-stack lexer is known.
638void Preprocessor::RemoveTopOfLexerStack() {
639 assert(!IncludeMacroStack.empty() && "Ran out of stack entries to load");
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000640
641 if (CurMacroExpander) {
642 // Delete or cache the now-dead macro expander.
643 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
644 delete CurMacroExpander;
645 else
646 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
647 } else {
648 delete CurLexer;
649 }
Chris Lattner7667d0d2006-07-16 18:16:58 +0000650 CurLexer = IncludeMacroStack.back().TheLexer;
651 CurDirLookup = IncludeMacroStack.back().TheDirLookup;
652 CurMacroExpander = IncludeMacroStack.back().TheMacroExpander;
653 IncludeMacroStack.pop_back();
654}
655
Chris Lattner22eb9722006-06-18 05:43:12 +0000656//===----------------------------------------------------------------------===//
Chris Lattner677757a2006-06-28 05:26:32 +0000657// Macro Expansion Handling.
Chris Lattner22eb9722006-06-18 05:43:12 +0000658//===----------------------------------------------------------------------===//
659
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000660/// setMacroInfo - Specify a macro for this identifier.
661///
662void Preprocessor::setMacroInfo(IdentifierInfo *II, MacroInfo *MI) {
663 if (MI == 0) {
664 if (II->hasMacroDefinition()) {
665 Macros.erase(II);
666 II->setHasMacroDefinition(false);
667 }
668 } else {
669 Macros[II] = MI;
670 II->setHasMacroDefinition(true);
671 }
672}
673
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000674/// RegisterBuiltinMacro - Register the specified identifier in the identifier
675/// table and mark it as a builtin macro to be expanded.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +0000676IdentifierInfo *Preprocessor::RegisterBuiltinMacro(const char *Name) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000677 // Get the identifier.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +0000678 IdentifierInfo *Id = getIdentifierInfo(Name);
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000679
680 // Mark it as being a macro that is builtin.
681 MacroInfo *MI = new MacroInfo(SourceLocation());
682 MI->setIsBuiltinMacro();
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000683 setMacroInfo(Id, MI);
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000684 return Id;
685}
686
687
Chris Lattner677757a2006-06-28 05:26:32 +0000688/// RegisterBuiltinMacros - Register builtin macros, such as __LINE__ with the
689/// identifier table.
690void Preprocessor::RegisterBuiltinMacros() {
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000691 Ident__LINE__ = RegisterBuiltinMacro("__LINE__");
Chris Lattner630b33c2006-07-01 22:46:53 +0000692 Ident__FILE__ = RegisterBuiltinMacro("__FILE__");
Chris Lattnerc673f902006-06-30 06:10:41 +0000693 Ident__DATE__ = RegisterBuiltinMacro("__DATE__");
694 Ident__TIME__ = RegisterBuiltinMacro("__TIME__");
Chris Lattner69772b02006-07-02 20:34:39 +0000695 Ident_Pragma = RegisterBuiltinMacro("_Pragma");
Chris Lattnerc1283b92006-07-01 23:16:30 +0000696
697 // GCC Extensions.
698 Ident__BASE_FILE__ = RegisterBuiltinMacro("__BASE_FILE__");
699 Ident__INCLUDE_LEVEL__ = RegisterBuiltinMacro("__INCLUDE_LEVEL__");
Chris Lattner847e0e42006-07-01 23:49:16 +0000700 Ident__TIMESTAMP__ = RegisterBuiltinMacro("__TIMESTAMP__");
Chris Lattner22eb9722006-06-18 05:43:12 +0000701}
702
Chris Lattnerc2395832006-07-09 00:57:04 +0000703/// isTrivialSingleTokenExpansion - Return true if MI, which has a single token
704/// in its expansion, currently expands to that token literally.
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000705static bool isTrivialSingleTokenExpansion(const MacroInfo *MI,
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000706 const IdentifierInfo *MacroIdent,
707 Preprocessor &PP) {
Chris Lattnerc2395832006-07-09 00:57:04 +0000708 IdentifierInfo *II = MI->getReplacementToken(0).getIdentifierInfo();
709
710 // If the token isn't an identifier, it's always literally expanded.
711 if (II == 0) return true;
712
713 // If the identifier is a macro, and if that macro is enabled, it may be
714 // expanded so it's not a trivial expansion.
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000715 if (II->hasMacroDefinition() && PP.getMacroInfo(II)->isEnabled() &&
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000716 // Fast expanding "#define X X" is ok, because X would be disabled.
717 II != MacroIdent)
Chris Lattnerc2395832006-07-09 00:57:04 +0000718 return false;
719
720 // If this is an object-like macro invocation, it is safe to trivially expand
721 // it.
722 if (MI->isObjectLike()) return true;
723
724 // If this is a function-like macro invocation, it's safe to trivially expand
725 // as long as the identifier is not a macro argument.
726 for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end();
727 I != E; ++I)
728 if (*I == II)
729 return false; // Identifier is a macro argument.
Chris Lattner273ddd52006-07-29 07:33:01 +0000730
Chris Lattnerc2395832006-07-09 00:57:04 +0000731 return true;
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000732}
733
Chris Lattnerc2395832006-07-09 00:57:04 +0000734
Chris Lattnerafe603f2006-07-11 04:02:46 +0000735/// isNextPPTokenLParen - Determine whether the next preprocessor token to be
736/// lexed is a '('. If so, consume the token and return true, if not, this
737/// method should have no observable side-effect on the lexed tokens.
738bool Preprocessor::isNextPPTokenLParen() {
Chris Lattnerafe603f2006-07-11 04:02:46 +0000739 // Do some quick tests for rejection cases.
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000740 unsigned Val;
741 if (CurLexer)
Chris Lattner678c8802006-07-11 05:46:12 +0000742 Val = CurLexer->isNextPPTokenLParen();
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000743 else
744 Val = CurMacroExpander->isNextTokenLParen();
745
746 if (Val == 2) {
Chris Lattner5c983792007-07-19 00:07:36 +0000747 // We have run off the end. If it's a source file we don't
748 // examine enclosing ones (C99 5.1.1.2p4). Otherwise walk up the
749 // macro stack.
750 if (CurLexer)
751 return false;
752 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000753 IncludeStackInfo &Entry = IncludeMacroStack[i-1];
754 if (Entry.TheLexer)
Chris Lattner678c8802006-07-11 05:46:12 +0000755 Val = Entry.TheLexer->isNextPPTokenLParen();
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000756 else
757 Val = Entry.TheMacroExpander->isNextTokenLParen();
Chris Lattner5c983792007-07-19 00:07:36 +0000758
759 if (Val != 2)
760 break;
761
762 // Ran off the end of a source file?
763 if (Entry.TheLexer)
764 return false;
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000765 }
Chris Lattnerafe603f2006-07-11 04:02:46 +0000766 }
767
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000768 // Okay, if we know that the token is a '(', lex it and return. Otherwise we
769 // have found something that isn't a '(' or we found the end of the
770 // translation unit. In either case, return false.
771 if (Val != 1)
772 return false;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000773
Chris Lattner146762e2007-07-20 16:59:19 +0000774 Token Tok;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000775 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000776 assert(Tok.is(tok::l_paren) && "Error computing l-paren-ness?");
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000777 return true;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000778}
Chris Lattner677757a2006-06-28 05:26:32 +0000779
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000780/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be
781/// expanded as a macro, handle it and return the next token as 'Identifier'.
Chris Lattner146762e2007-07-20 16:59:19 +0000782bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier,
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000783 MacroInfo *MI) {
Chris Lattner78186052006-07-09 00:45:31 +0000784
785 // If this is a builtin macro, like __LINE__ or _Pragma, handle it specially.
786 if (MI->isBuiltinMacro()) {
787 ExpandBuiltinMacro(Identifier);
788 return false;
789 }
790
Chris Lattner81278c62006-10-14 19:03:49 +0000791 // If this is the first use of a target-specific macro, warn about it.
792 if (MI->isTargetSpecific()) {
793 MI->setIsTargetSpecific(false); // Don't warn on second use.
794 getTargetInfo().DiagnoseNonPortability(Identifier.getLocation(),
795 diag::port_target_macro_use);
796 }
797
Chris Lattneree8760b2006-07-15 07:42:55 +0000798 /// Args - If this is a function-like macro expansion, this contains,
Chris Lattner78186052006-07-09 00:45:31 +0000799 /// for each macro argument, the list of tokens that were provided to the
800 /// invocation.
Chris Lattneree8760b2006-07-15 07:42:55 +0000801 MacroArgs *Args = 0;
Chris Lattner78186052006-07-09 00:45:31 +0000802
803 // If this is a function-like macro, read the arguments.
804 if (MI->isFunctionLike()) {
Chris Lattner78186052006-07-09 00:45:31 +0000805 // C99 6.10.3p10: If the preprocessing token immediately after the the macro
Chris Lattner24dbee72007-07-19 16:11:58 +0000806 // name isn't a '(', this macro should not be expanded. Otherwise, consume
807 // it.
Chris Lattnerafe603f2006-07-11 04:02:46 +0000808 if (!isNextPPTokenLParen())
Chris Lattner78186052006-07-09 00:45:31 +0000809 return true;
810
Chris Lattner78186052006-07-09 00:45:31 +0000811 // Remember that we are now parsing the arguments to a macro invocation.
812 // Preprocessor directives used inside macro arguments are not portable, and
813 // this enables the warning.
Chris Lattneree8760b2006-07-15 07:42:55 +0000814 InMacroArgs = true;
815 Args = ReadFunctionLikeMacroArgs(Identifier, MI);
Chris Lattner78186052006-07-09 00:45:31 +0000816
817 // Finished parsing args.
Chris Lattneree8760b2006-07-15 07:42:55 +0000818 InMacroArgs = false;
Chris Lattner78186052006-07-09 00:45:31 +0000819
820 // If there was an error parsing the arguments, bail out.
Chris Lattneree8760b2006-07-15 07:42:55 +0000821 if (Args == 0) return false;
Chris Lattner78186052006-07-09 00:45:31 +0000822
823 ++NumFnMacroExpanded;
824 } else {
825 ++NumMacroExpanded;
826 }
Chris Lattner13044d92006-07-03 05:16:44 +0000827
828 // Notice that this macro has been used.
829 MI->setIsUsed(true);
Chris Lattner69772b02006-07-02 20:34:39 +0000830
831 // If we started lexing a macro, enter the macro expansion body.
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000832
833 // If this macro expands to no tokens, don't bother to push it onto the
834 // expansion stack, only to take it right back off.
835 if (MI->getNumTokens() == 0) {
Chris Lattner2ada5d32006-07-15 07:51:24 +0000836 // No need for arg info.
Chris Lattnerc1410dc2006-07-26 05:22:49 +0000837 if (Args) Args->destroy();
Chris Lattner78186052006-07-09 00:45:31 +0000838
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000839 // Ignore this macro use, just return the next token in the current
840 // buffer.
841 bool HadLeadingSpace = Identifier.hasLeadingSpace();
842 bool IsAtStartOfLine = Identifier.isAtStartOfLine();
843
844 Lex(Identifier);
845
846 // If the identifier isn't on some OTHER line, inherit the leading
847 // whitespace/first-on-a-line property of this token. This handles
848 // stuff like "! XX," -> "! ," and " XX," -> " ,", when XX is
849 // empty.
850 if (!Identifier.isAtStartOfLine()) {
Chris Lattner146762e2007-07-20 16:59:19 +0000851 if (IsAtStartOfLine) Identifier.setFlag(Token::StartOfLine);
852 if (HadLeadingSpace) Identifier.setFlag(Token::LeadingSpace);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000853 }
854 ++NumFastMacroExpanded;
Chris Lattner78186052006-07-09 00:45:31 +0000855 return false;
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000856
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000857 } else if (MI->getNumTokens() == 1 &&
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000858 isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(),
859 *this)){
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000860 // Otherwise, if this macro expands into a single trivially-expanded
861 // token: expand it now. This handles common cases like
862 // "#define VAL 42".
863
864 // Propagate the isAtStartOfLine/hasLeadingSpace markers of the macro
865 // identifier to the expanded token.
866 bool isAtStartOfLine = Identifier.isAtStartOfLine();
867 bool hasLeadingSpace = Identifier.hasLeadingSpace();
868
869 // Remember where the token is instantiated.
870 SourceLocation InstantiateLoc = Identifier.getLocation();
871
872 // Replace the result token.
873 Identifier = MI->getReplacementToken(0);
874
875 // Restore the StartOfLine/LeadingSpace markers.
Chris Lattner146762e2007-07-20 16:59:19 +0000876 Identifier.setFlagValue(Token::StartOfLine , isAtStartOfLine);
877 Identifier.setFlagValue(Token::LeadingSpace, hasLeadingSpace);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000878
879 // Update the tokens location to include both its logical and physical
880 // locations.
881 SourceLocation Loc =
Chris Lattnerc673f902006-06-30 06:10:41 +0000882 SourceMgr.getInstantiationLoc(Identifier.getLocation(), InstantiateLoc);
Chris Lattner8c204872006-10-14 05:19:21 +0000883 Identifier.setLocation(Loc);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000884
Chris Lattner6e4bf522006-07-27 06:59:25 +0000885 // If this is #define X X, we must mark the result as unexpandible.
886 if (IdentifierInfo *NewII = Identifier.getIdentifierInfo())
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000887 if (getMacroInfo(NewII) == MI)
Chris Lattner146762e2007-07-20 16:59:19 +0000888 Identifier.setFlag(Token::DisableExpand);
Chris Lattner6e4bf522006-07-27 06:59:25 +0000889
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000890 // Since this is not an identifier token, it can't be macro expanded, so
891 // we're done.
892 ++NumFastMacroExpanded;
Chris Lattner78186052006-07-09 00:45:31 +0000893 return false;
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000894 }
895
Chris Lattner78186052006-07-09 00:45:31 +0000896 // Start expanding the macro.
Chris Lattneree8760b2006-07-15 07:42:55 +0000897 EnterMacro(Identifier, Args);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000898
899 // Now that the macro is at the top of the include stack, ask the
900 // preprocessor to read the next token from it.
Chris Lattner78186052006-07-09 00:45:31 +0000901 Lex(Identifier);
902 return false;
903}
904
Chris Lattneree8760b2006-07-15 07:42:55 +0000905/// ReadFunctionLikeMacroArgs - After reading "MACRO(", this method is
Chris Lattner2ada5d32006-07-15 07:51:24 +0000906/// invoked to read all of the actual arguments specified for the macro
Chris Lattner78186052006-07-09 00:45:31 +0000907/// invocation. This returns null on error.
Chris Lattner146762e2007-07-20 16:59:19 +0000908MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
Chris Lattneree8760b2006-07-15 07:42:55 +0000909 MacroInfo *MI) {
Chris Lattner78186052006-07-09 00:45:31 +0000910 // The number of fixed arguments to parse.
911 unsigned NumFixedArgsLeft = MI->getNumArgs();
912 bool isVariadic = MI->isVariadic();
913
Chris Lattner78186052006-07-09 00:45:31 +0000914 // Outer loop, while there are more arguments, keep reading them.
Chris Lattner146762e2007-07-20 16:59:19 +0000915 Token Tok;
Chris Lattner8c204872006-10-14 05:19:21 +0000916 Tok.setKind(tok::comma);
Chris Lattner78186052006-07-09 00:45:31 +0000917 --NumFixedArgsLeft; // Start reading the first arg.
Chris Lattner36b6e812006-07-21 06:38:30 +0000918
919 // ArgTokens - Build up a list of tokens that make up each argument. Each
Chris Lattner7a4af3b2006-07-26 06:26:52 +0000920 // argument is separated by an EOF token. Use a SmallVector so we can avoid
921 // heap allocations in the common case.
Chris Lattner146762e2007-07-20 16:59:19 +0000922 llvm::SmallVector<Token, 64> ArgTokens;
Chris Lattner36b6e812006-07-21 06:38:30 +0000923
924 unsigned NumActuals = 0;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000925 while (Tok.is(tok::comma)) {
Chris Lattner24dbee72007-07-19 16:11:58 +0000926 // C99 6.10.3p11: Keep track of the number of l_parens we have seen. Note
927 // that we already consumed the first one.
Chris Lattner78186052006-07-09 00:45:31 +0000928 unsigned NumParens = 0;
Chris Lattner36b6e812006-07-21 06:38:30 +0000929
Chris Lattner78186052006-07-09 00:45:31 +0000930 while (1) {
Chris Lattnerafe603f2006-07-11 04:02:46 +0000931 // Read arguments as unexpanded tokens. This avoids issues, e.g., where
932 // an argument value in a macro could expand to ',' or '(' or ')'.
Chris Lattner78186052006-07-09 00:45:31 +0000933 LexUnexpandedToken(Tok);
934
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000935 if (Tok.is(tok::eof)) {
Chris Lattner78186052006-07-09 00:45:31 +0000936 Diag(MacroName, diag::err_unterm_macro_invoc);
937 // Do not lose the EOF. Return it to the client.
938 MacroName = Tok;
939 return 0;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000940 } else if (Tok.is(tok::r_paren)) {
Chris Lattner78186052006-07-09 00:45:31 +0000941 // If we found the ) token, the macro arg list is done.
942 if (NumParens-- == 0)
943 break;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000944 } else if (Tok.is(tok::l_paren)) {
Chris Lattner78186052006-07-09 00:45:31 +0000945 ++NumParens;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000946 } else if (Tok.is(tok::comma) && NumParens == 0) {
Chris Lattner78186052006-07-09 00:45:31 +0000947 // Comma ends this argument if there are more fixed arguments expected.
948 if (NumFixedArgsLeft)
949 break;
950
Chris Lattner2ada5d32006-07-15 07:51:24 +0000951 // If this is not a variadic macro, too many args were specified.
Chris Lattner78186052006-07-09 00:45:31 +0000952 if (!isVariadic) {
953 // Emit the diagnostic at the macro name in case there is a missing ).
954 // Emitting it at the , could be far away from the macro name.
Chris Lattner2ada5d32006-07-15 07:51:24 +0000955 Diag(MacroName, diag::err_too_many_args_in_macro_invoc);
Chris Lattner78186052006-07-09 00:45:31 +0000956 return 0;
957 }
958 // Otherwise, continue to add the tokens to this variable argument.
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000959 } else if (Tok.is(tok::comment) && !KeepMacroComments) {
Chris Lattner457fc152006-07-29 06:30:25 +0000960 // If this is a comment token in the argument list and we're just in
961 // -C mode (not -CC mode), discard the comment.
962 continue;
Chris Lattner9fcdc522007-11-23 06:50:21 +0000963 } else if (Tok.is(tok::identifier)) {
964 // Reading macro arguments can cause macros that we are currently
965 // expanding from to be popped off the expansion stack. Doing so causes
966 // them to be reenabled for expansion. Here we record whether any
967 // identifiers we lex as macro arguments correspond to disabled macros.
968 // If so, we mark the token as noexpand. This is a subtle aspect of
969 // C99 6.10.3.4p2.
970 if (MacroInfo *MI = getMacroInfo(Tok.getIdentifierInfo()))
971 if (!MI->isEnabled())
972 Tok.setFlag(Token::DisableExpand);
Chris Lattner78186052006-07-09 00:45:31 +0000973 }
974
975 ArgTokens.push_back(Tok);
976 }
977
Chris Lattnera12dd152006-07-11 04:09:02 +0000978 // Empty arguments are standard in C99 and supported as an extension in
979 // other modes.
980 if (ArgTokens.empty() && !Features.C99)
981 Diag(Tok, diag::ext_empty_fnmacro_arg);
Chris Lattnerafe603f2006-07-11 04:02:46 +0000982
Chris Lattner36b6e812006-07-21 06:38:30 +0000983 // Add a marker EOF token to the end of the token list for this argument.
Chris Lattner146762e2007-07-20 16:59:19 +0000984 Token EOFTok;
Chris Lattner8c204872006-10-14 05:19:21 +0000985 EOFTok.startToken();
986 EOFTok.setKind(tok::eof);
987 EOFTok.setLocation(Tok.getLocation());
988 EOFTok.setLength(0);
Chris Lattner36b6e812006-07-21 06:38:30 +0000989 ArgTokens.push_back(EOFTok);
990 ++NumActuals;
Chris Lattner78186052006-07-09 00:45:31 +0000991 --NumFixedArgsLeft;
992 };
993
994 // Okay, we either found the r_paren. Check to see if we parsed too few
995 // arguments.
Chris Lattner78186052006-07-09 00:45:31 +0000996 unsigned MinArgsExpected = MI->getNumArgs();
997
Chris Lattner775d8322006-07-29 04:39:41 +0000998 // See MacroArgs instance var for description of this.
999 bool isVarargsElided = false;
1000
Chris Lattner2ada5d32006-07-15 07:51:24 +00001001 if (NumActuals < MinArgsExpected) {
Chris Lattner78186052006-07-09 00:45:31 +00001002 // There are several cases where too few arguments is ok, handle them now.
Chris Lattner2ada5d32006-07-15 07:51:24 +00001003 if (NumActuals+1 == MinArgsExpected && MI->isVariadic()) {
Chris Lattner78186052006-07-09 00:45:31 +00001004 // Varargs where the named vararg parameter is missing: ok as extension.
1005 // #define A(x, ...)
1006 // A("blah")
1007 Diag(Tok, diag::ext_missing_varargs_arg);
Chris Lattner775d8322006-07-29 04:39:41 +00001008
1009 // Remember this occurred if this is a C99 macro invocation with at least
1010 // one actual argument.
Chris Lattner95a06b32006-07-30 08:40:43 +00001011 isVarargsElided = MI->isC99Varargs() && MI->getNumArgs() > 1;
Chris Lattner78186052006-07-09 00:45:31 +00001012 } else if (MI->getNumArgs() == 1) {
1013 // #define A(x)
1014 // A()
Chris Lattnere7a51302006-07-29 01:25:12 +00001015 // is ok because it is an empty argument.
Chris Lattnera12dd152006-07-11 04:09:02 +00001016
1017 // Empty arguments are standard in C99 and supported as an extension in
1018 // other modes.
1019 if (ArgTokens.empty() && !Features.C99)
1020 Diag(Tok, diag::ext_empty_fnmacro_arg);
Chris Lattner78186052006-07-09 00:45:31 +00001021 } else {
1022 // Otherwise, emit the error.
Chris Lattner2ada5d32006-07-15 07:51:24 +00001023 Diag(Tok, diag::err_too_few_args_in_macro_invoc);
Chris Lattner78186052006-07-09 00:45:31 +00001024 return 0;
1025 }
Chris Lattnere7a51302006-07-29 01:25:12 +00001026
1027 // Add a marker EOF token to the end of the token list for this argument.
1028 SourceLocation EndLoc = Tok.getLocation();
Chris Lattner8c204872006-10-14 05:19:21 +00001029 Tok.startToken();
1030 Tok.setKind(tok::eof);
1031 Tok.setLocation(EndLoc);
1032 Tok.setLength(0);
Chris Lattnere7a51302006-07-29 01:25:12 +00001033 ArgTokens.push_back(Tok);
Chris Lattner78186052006-07-09 00:45:31 +00001034 }
1035
Chris Lattner775d8322006-07-29 04:39:41 +00001036 return MacroArgs::create(MI, &ArgTokens[0], ArgTokens.size(),isVarargsElided);
Chris Lattnerf373a4a2006-06-26 06:16:29 +00001037}
1038
Chris Lattnerc673f902006-06-30 06:10:41 +00001039/// ComputeDATE_TIME - Compute the current time, enter it into the specified
1040/// scratch buffer, then return DATELoc/TIMELoc locations with the position of
1041/// the identifier tokens inserted.
1042static void ComputeDATE_TIME(SourceLocation &DATELoc, SourceLocation &TIMELoc,
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001043 Preprocessor &PP) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001044 time_t TT = time(0);
1045 struct tm *TM = localtime(&TT);
1046
1047 static const char * const Months[] = {
1048 "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
1049 };
1050
1051 char TmpBuffer[100];
1052 sprintf(TmpBuffer, "\"%s %2d %4d\"", Months[TM->tm_mon], TM->tm_mday,
1053 TM->tm_year+1900);
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001054 DATELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
Chris Lattnerc673f902006-06-30 06:10:41 +00001055
1056 sprintf(TmpBuffer, "\"%02d:%02d:%02d\"", TM->tm_hour, TM->tm_min, TM->tm_sec);
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001057 TIMELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
Chris Lattnerc673f902006-06-30 06:10:41 +00001058}
1059
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001060/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded
1061/// as a builtin macro, handle it and return the next token as 'Tok'.
Chris Lattner146762e2007-07-20 16:59:19 +00001062void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001063 // Figure out which token this is.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001064 IdentifierInfo *II = Tok.getIdentifierInfo();
1065 assert(II && "Can't be a macro without id info!");
Chris Lattner69772b02006-07-02 20:34:39 +00001066
1067 // If this is an _Pragma directive, expand it, invoke the pragma handler, then
1068 // lex the token after it.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001069 if (II == Ident_Pragma)
Chris Lattner69772b02006-07-02 20:34:39 +00001070 return Handle_Pragma(Tok);
1071
Chris Lattner78186052006-07-09 00:45:31 +00001072 ++NumBuiltinMacroExpanded;
1073
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001074 char TmpBuffer[100];
Chris Lattner69772b02006-07-02 20:34:39 +00001075
1076 // Set up the return result.
Chris Lattner8c204872006-10-14 05:19:21 +00001077 Tok.setIdentifierInfo(0);
Chris Lattner146762e2007-07-20 16:59:19 +00001078 Tok.clearFlag(Token::NeedsCleaning);
Chris Lattner630b33c2006-07-01 22:46:53 +00001079
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001080 if (II == Ident__LINE__) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001081 // __LINE__ expands to a simple numeric value.
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001082 sprintf(TmpBuffer, "%u", SourceMgr.getLogicalLineNumber(Tok.getLocation()));
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001083 unsigned Length = strlen(TmpBuffer);
Chris Lattner8c204872006-10-14 05:19:21 +00001084 Tok.setKind(tok::numeric_constant);
1085 Tok.setLength(Length);
1086 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001087 } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001088 SourceLocation Loc = Tok.getLocation();
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001089 if (II == Ident__BASE_FILE__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001090 Diag(Tok, diag::ext_pp_base_file);
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001091 SourceLocation NextLoc = SourceMgr.getIncludeLoc(Loc);
1092 while (NextLoc.isValid()) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001093 Loc = NextLoc;
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001094 NextLoc = SourceMgr.getIncludeLoc(Loc);
Chris Lattnerc1283b92006-07-01 23:16:30 +00001095 }
1096 }
1097
Chris Lattner0766e592006-07-03 01:07:01 +00001098 // Escape this filename. Turn '\' -> '\\' '"' -> '\"'
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001099 std::string FN = SourceMgr.getSourceName(SourceMgr.getLogicalLoc(Loc));
Chris Lattnerecc39e92006-07-15 05:23:31 +00001100 FN = '"' + Lexer::Stringify(FN) + '"';
Chris Lattner8c204872006-10-14 05:19:21 +00001101 Tok.setKind(tok::string_literal);
1102 Tok.setLength(FN.size());
1103 Tok.setLocation(CreateString(&FN[0], FN.size(), Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001104 } else if (II == Ident__DATE__) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001105 if (!DATELoc.isValid())
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001106 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
Chris Lattner8c204872006-10-14 05:19:21 +00001107 Tok.setKind(tok::string_literal);
1108 Tok.setLength(strlen("\"Mmm dd yyyy\""));
1109 Tok.setLocation(SourceMgr.getInstantiationLoc(DATELoc, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001110 } else if (II == Ident__TIME__) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001111 if (!TIMELoc.isValid())
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001112 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
Chris Lattner8c204872006-10-14 05:19:21 +00001113 Tok.setKind(tok::string_literal);
1114 Tok.setLength(strlen("\"hh:mm:ss\""));
1115 Tok.setLocation(SourceMgr.getInstantiationLoc(TIMELoc, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001116 } else if (II == Ident__INCLUDE_LEVEL__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001117 Diag(Tok, diag::ext_pp_include_level);
1118
1119 // Compute the include depth of this token.
1120 unsigned Depth = 0;
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001121 SourceLocation Loc = SourceMgr.getIncludeLoc(Tok.getLocation());
1122 for (; Loc.isValid(); ++Depth)
1123 Loc = SourceMgr.getIncludeLoc(Loc);
Chris Lattnerc1283b92006-07-01 23:16:30 +00001124
1125 // __INCLUDE_LEVEL__ expands to a simple numeric value.
1126 sprintf(TmpBuffer, "%u", Depth);
1127 unsigned Length = strlen(TmpBuffer);
Chris Lattner8c204872006-10-14 05:19:21 +00001128 Tok.setKind(tok::numeric_constant);
1129 Tok.setLength(Length);
1130 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001131 } else if (II == Ident__TIMESTAMP__) {
Chris Lattner847e0e42006-07-01 23:49:16 +00001132 // MSVC, ICC, GCC, VisualAge C++ extension. The generated string should be
1133 // of the form "Ddd Mmm dd hh::mm::ss yyyy", which is returned by asctime.
1134 Diag(Tok, diag::ext_pp_timestamp);
1135
1136 // Get the file that we are lexing out of. If we're currently lexing from
1137 // a macro, dig into the include stack.
1138 const FileEntry *CurFile = 0;
Chris Lattnerecfeafe2006-07-02 21:26:45 +00001139 Lexer *TheLexer = getCurrentFileLexer();
Chris Lattner847e0e42006-07-01 23:49:16 +00001140
1141 if (TheLexer)
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001142 CurFile = SourceMgr.getFileEntryForLoc(TheLexer->getFileLoc());
Chris Lattner847e0e42006-07-01 23:49:16 +00001143
1144 // If this file is older than the file it depends on, emit a diagnostic.
1145 const char *Result;
1146 if (CurFile) {
1147 time_t TT = CurFile->getModificationTime();
1148 struct tm *TM = localtime(&TT);
1149 Result = asctime(TM);
1150 } else {
1151 Result = "??? ??? ?? ??:??:?? ????\n";
1152 }
1153 TmpBuffer[0] = '"';
1154 strcpy(TmpBuffer+1, Result);
1155 unsigned Len = strlen(TmpBuffer);
1156 TmpBuffer[Len-1] = '"'; // Replace the newline with a quote.
Chris Lattner8c204872006-10-14 05:19:21 +00001157 Tok.setKind(tok::string_literal);
1158 Tok.setLength(Len);
1159 Tok.setLocation(CreateString(TmpBuffer, Len, Tok.getLocation()));
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001160 } else {
1161 assert(0 && "Unknown identifier!");
Chris Lattner615315f2007-12-09 20:31:55 +00001162 }
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001163}
Chris Lattner677757a2006-06-28 05:26:32 +00001164
1165//===----------------------------------------------------------------------===//
1166// Lexer Event Handling.
1167//===----------------------------------------------------------------------===//
1168
Chris Lattnercefc7682006-07-08 08:28:12 +00001169/// LookUpIdentifierInfo - Given a tok::identifier token, look up the
1170/// identifier information for the token and install it into the token.
Chris Lattner146762e2007-07-20 16:59:19 +00001171IdentifierInfo *Preprocessor::LookUpIdentifierInfo(Token &Identifier,
Chris Lattnercefc7682006-07-08 08:28:12 +00001172 const char *BufPtr) {
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001173 assert(Identifier.is(tok::identifier) && "Not an identifier!");
Chris Lattnercefc7682006-07-08 08:28:12 +00001174 assert(Identifier.getIdentifierInfo() == 0 && "Identinfo already exists!");
1175
1176 // Look up this token, see if it is a macro, or if it is a language keyword.
1177 IdentifierInfo *II;
1178 if (BufPtr && !Identifier.needsCleaning()) {
1179 // No cleaning needed, just use the characters from the lexed buffer.
1180 II = getIdentifierInfo(BufPtr, BufPtr+Identifier.getLength());
1181 } else {
1182 // Cleaning needed, alloca a buffer, clean into it, then use the buffer.
Chris Lattnerf9aba2c2007-07-13 17:10:38 +00001183 llvm::SmallVector<char, 64> IdentifierBuffer;
1184 IdentifierBuffer.resize(Identifier.getLength());
1185 const char *TmpBuf = &IdentifierBuffer[0];
Chris Lattnercefc7682006-07-08 08:28:12 +00001186 unsigned Size = getSpelling(Identifier, TmpBuf);
1187 II = getIdentifierInfo(TmpBuf, TmpBuf+Size);
1188 }
Chris Lattner8c204872006-10-14 05:19:21 +00001189 Identifier.setIdentifierInfo(II);
Chris Lattnercefc7682006-07-08 08:28:12 +00001190 return II;
1191}
1192
1193
Chris Lattner677757a2006-06-28 05:26:32 +00001194/// HandleIdentifier - This callback is invoked when the lexer reads an
1195/// identifier. This callback looks up the identifier in the map and/or
1196/// potentially macro expands it or turns it into a named token (like 'for').
Chris Lattner146762e2007-07-20 16:59:19 +00001197void Preprocessor::HandleIdentifier(Token &Identifier) {
Chris Lattner0f1f5052006-07-20 04:16:23 +00001198 assert(Identifier.getIdentifierInfo() &&
1199 "Can't handle identifiers without identifier info!");
1200
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001201 IdentifierInfo &II = *Identifier.getIdentifierInfo();
Chris Lattner677757a2006-06-28 05:26:32 +00001202
1203 // If this identifier was poisoned, and if it was not produced from a macro
1204 // expansion, emit an error.
Chris Lattner8ff71992006-07-06 05:17:39 +00001205 if (II.isPoisoned() && CurLexer) {
1206 if (&II != Ident__VA_ARGS__) // We warn about __VA_ARGS__ with poisoning.
1207 Diag(Identifier, diag::err_pp_used_poisoned_id);
1208 else
1209 Diag(Identifier, diag::ext_pp_bad_vaargs_use);
1210 }
Chris Lattner677757a2006-06-28 05:26:32 +00001211
Chris Lattner78186052006-07-09 00:45:31 +00001212 // If this is a macro to be expanded, do it.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001213 if (MacroInfo *MI = getMacroInfo(&II)) {
Chris Lattner6e4bf522006-07-27 06:59:25 +00001214 if (!DisableMacroExpansion && !Identifier.isExpandDisabled()) {
1215 if (MI->isEnabled()) {
1216 if (!HandleMacroExpandedIdentifier(Identifier, MI))
1217 return;
1218 } else {
1219 // C99 6.10.3.4p2 says that a disabled macro may never again be
1220 // expanded, even if it's in a context where it could be expanded in the
1221 // future.
Chris Lattner146762e2007-07-20 16:59:19 +00001222 Identifier.setFlag(Token::DisableExpand);
Chris Lattner6e4bf522006-07-27 06:59:25 +00001223 }
1224 }
Chris Lattner063400e2006-10-14 19:54:15 +00001225 } else if (II.isOtherTargetMacro() && !DisableMacroExpansion) {
1226 // If this identifier is a macro on some other target, emit a diagnostic.
1227 // This diagnosic is only emitted when macro expansion is enabled, because
1228 // the macro would not have been expanded for the other target either.
1229 II.setIsOtherTargetMacro(false); // Don't warn on second use.
1230 getTargetInfo().DiagnoseNonPortability(Identifier.getLocation(),
1231 diag::port_target_macro_use);
1232
1233 }
Chris Lattner677757a2006-06-28 05:26:32 +00001234
Chris Lattner5b9f4892006-11-21 17:23:33 +00001235 // C++ 2.11p2: If this is an alternative representation of a C++ operator,
1236 // then we act as if it is the actual operator and not the textual
1237 // representation of it.
1238 if (II.isCPlusPlusOperatorKeyword())
1239 Identifier.setIdentifierInfo(0);
1240
Chris Lattner677757a2006-06-28 05:26:32 +00001241 // Change the kind of this identifier to the appropriate token kind, e.g.
1242 // turning "for" into a keyword.
Chris Lattner8c204872006-10-14 05:19:21 +00001243 Identifier.setKind(II.getTokenID());
Chris Lattner677757a2006-06-28 05:26:32 +00001244
1245 // If this is an extension token, diagnose its use.
Steve Naroffa8fd9732007-06-11 00:35:03 +00001246 // FIXME: tried (unsuccesfully) to shut this up when compiling with gnu99
1247 // For now, I'm just commenting it out (while I work on attributes).
Chris Lattner53621a52007-06-13 20:44:40 +00001248 if (II.isExtensionToken() && Features.C99)
1249 Diag(Identifier, diag::ext_token_used);
Chris Lattner677757a2006-06-28 05:26:32 +00001250}
1251
Chris Lattner22eb9722006-06-18 05:43:12 +00001252/// HandleEndOfFile - This callback is invoked when the lexer hits the end of
1253/// the current file. This either returns the EOF token or pops a level off
1254/// the include stack and keeps going.
Chris Lattner146762e2007-07-20 16:59:19 +00001255bool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001256 assert(!CurMacroExpander &&
1257 "Ending a file when currently in a macro!");
1258
Chris Lattner371ac8a2006-07-04 07:11:10 +00001259 // See if this file had a controlling macro.
Chris Lattner3665f162006-07-04 07:26:10 +00001260 if (CurLexer) { // Not ending a macro, ignore it.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001261 if (const IdentifierInfo *ControllingMacro =
Chris Lattner371ac8a2006-07-04 07:11:10 +00001262 CurLexer->MIOpt.GetControllingMacroAtEndOfFile()) {
Chris Lattner3665f162006-07-04 07:26:10 +00001263 // Okay, this has a controlling macro, remember in PerFileInfo.
1264 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001265 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001266 HeaderInfo.SetFileControllingMacro(FE, ControllingMacro);
Chris Lattner371ac8a2006-07-04 07:11:10 +00001267 }
1268 }
1269
Chris Lattner22eb9722006-06-18 05:43:12 +00001270 // If this is a #include'd file, pop it off the include stack and continue
1271 // lexing the #includer file.
Chris Lattner69772b02006-07-02 20:34:39 +00001272 if (!IncludeMacroStack.empty()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001273 // We're done with the #included file.
Chris Lattner7667d0d2006-07-16 18:16:58 +00001274 RemoveTopOfLexerStack();
Chris Lattner0c885f52006-06-21 06:50:18 +00001275
1276 // Notify the client, if desired, that we are in a new source file.
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001277 if (Callbacks && !isEndOfMacro && CurLexer) {
Chris Lattnerc8997182006-06-22 05:52:16 +00001278 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
1279
1280 // Get the file entry for the current file.
1281 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001282 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001283 FileType = HeaderInfo.getFileDirFlavor(FE);
Chris Lattnerc8997182006-06-22 05:52:16 +00001284
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001285 Callbacks->FileChanged(CurLexer->getSourceLocation(CurLexer->BufferPtr),
1286 PPCallbacks::ExitFile, FileType);
Chris Lattnerc8997182006-06-22 05:52:16 +00001287 }
Chris Lattner2183a6e2006-07-18 06:36:12 +00001288
1289 // Client should lex another token.
1290 return false;
Chris Lattner22eb9722006-06-18 05:43:12 +00001291 }
1292
Chris Lattner8c204872006-10-14 05:19:21 +00001293 Result.startToken();
Chris Lattnerd01e2912006-06-18 16:22:51 +00001294 CurLexer->BufferPtr = CurLexer->BufferEnd;
1295 CurLexer->FormTokenWithChars(Result, CurLexer->BufferEnd);
Chris Lattner8c204872006-10-14 05:19:21 +00001296 Result.setKind(tok::eof);
Chris Lattner22eb9722006-06-18 05:43:12 +00001297
1298 // We're done with the #included file.
1299 delete CurLexer;
1300 CurLexer = 0;
Chris Lattner13044d92006-07-03 05:16:44 +00001301
Chris Lattner03f83482006-07-10 06:16:26 +00001302 // This is the end of the top-level file. If the diag::pp_macro_not_used
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001303 // diagnostic is enabled, look for macros that have not been used.
Chris Lattnerb055f2d2007-02-11 08:19:57 +00001304 if (Diags.getDiagnosticLevel(diag::pp_macro_not_used) != Diagnostic::Ignored){
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001305 for (llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator I =
1306 Macros.begin(), E = Macros.end(); I != E; ++I) {
1307 if (!I->second->isUsed())
1308 Diag(I->second->getDefinitionLoc(), diag::pp_macro_not_used);
Chris Lattnerb055f2d2007-02-11 08:19:57 +00001309 }
1310 }
Chris Lattner2183a6e2006-07-18 06:36:12 +00001311 return true;
Chris Lattner22eb9722006-06-18 05:43:12 +00001312}
1313
1314/// HandleEndOfMacro - This callback is invoked when the lexer hits the end of
Chris Lattner7667d0d2006-07-16 18:16:58 +00001315/// the current macro expansion or token stream expansion.
Chris Lattner146762e2007-07-20 16:59:19 +00001316bool Preprocessor::HandleEndOfMacro(Token &Result) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001317 assert(CurMacroExpander && !CurLexer &&
1318 "Ending a macro when currently in a #include file!");
1319
Chris Lattnerc02c4ab2007-07-15 00:25:26 +00001320 // Delete or cache the now-dead macro expander.
1321 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
1322 delete CurMacroExpander;
1323 else
1324 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
Chris Lattner22eb9722006-06-18 05:43:12 +00001325
Chris Lattner69772b02006-07-02 20:34:39 +00001326 // Handle this like a #include file being popped off the stack.
1327 CurMacroExpander = 0;
1328 return HandleEndOfFile(Result, true);
Chris Lattner22eb9722006-06-18 05:43:12 +00001329}
1330
1331
1332//===----------------------------------------------------------------------===//
1333// Utility Methods for Preprocessor Directive Handling.
1334//===----------------------------------------------------------------------===//
1335
1336/// DiscardUntilEndOfDirective - Read and discard all tokens remaining on the
1337/// current line until the tok::eom token is found.
Chris Lattnercb283342006-06-18 06:48:37 +00001338void Preprocessor::DiscardUntilEndOfDirective() {
Chris Lattner146762e2007-07-20 16:59:19 +00001339 Token Tmp;
Chris Lattner22eb9722006-06-18 05:43:12 +00001340 do {
Chris Lattnercb283342006-06-18 06:48:37 +00001341 LexUnexpandedToken(Tmp);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001342 } while (Tmp.isNot(tok::eom));
Chris Lattner22eb9722006-06-18 05:43:12 +00001343}
1344
Chris Lattner652c1692006-11-21 23:47:30 +00001345/// isCXXNamedOperator - Returns "true" if the token is a named operator in C++.
1346static bool isCXXNamedOperator(const std::string &Spelling) {
1347 return Spelling == "and" || Spelling == "bitand" || Spelling == "bitor" ||
1348 Spelling == "compl" || Spelling == "not" || Spelling == "not_eq" ||
1349 Spelling == "or" || Spelling == "xor";
1350}
1351
Chris Lattner22eb9722006-06-18 05:43:12 +00001352/// ReadMacroName - Lex and validate a macro name, which occurs after a
1353/// #define or #undef. This sets the token kind to eom and discards the rest
Chris Lattnere8eef322006-07-08 07:01:00 +00001354/// of the macro line if the macro name is invalid. isDefineUndef is 1 if
1355/// this is due to a a #define, 2 if #undef directive, 0 if it is something
Chris Lattner44f8a662006-07-03 01:27:27 +00001356/// else (e.g. #ifdef).
Chris Lattner146762e2007-07-20 16:59:19 +00001357void Preprocessor::ReadMacroName(Token &MacroNameTok, char isDefineUndef) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001358 // Read the token, don't allow macro expansion on it.
Chris Lattnercb283342006-06-18 06:48:37 +00001359 LexUnexpandedToken(MacroNameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001360
1361 // Missing macro name?
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001362 if (MacroNameTok.is(tok::eom))
Chris Lattner22eb9722006-06-18 05:43:12 +00001363 return Diag(MacroNameTok, diag::err_pp_missing_macro_name);
1364
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001365 IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1366 if (II == 0) {
Chris Lattner652c1692006-11-21 23:47:30 +00001367 std::string Spelling = getSpelling(MacroNameTok);
1368 if (isCXXNamedOperator(Spelling))
1369 // C++ 2.5p2: Alternative tokens behave the same as its primary token
1370 // except for their spellings.
1371 Diag(MacroNameTok, diag::err_pp_operator_used_as_macro_name, Spelling);
1372 else
1373 Diag(MacroNameTok, diag::err_pp_macro_not_identifier);
Chris Lattner22eb9722006-06-18 05:43:12 +00001374 // Fall through on error.
Chris Lattner2bb8a952006-11-21 22:24:17 +00001375 } else if (isDefineUndef && II->getPPKeywordID() == tok::pp_defined) {
Chris Lattner44f8a662006-07-03 01:27:27 +00001376 // Error if defining "defined": C99 6.10.8.4.
Chris Lattneraaf09112006-07-03 01:17:59 +00001377 Diag(MacroNameTok, diag::err_defined_macro_name);
Chris Lattner259716a2007-10-07 08:04:56 +00001378 } else if (isDefineUndef && II->hasMacroDefinition() &&
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001379 getMacroInfo(II)->isBuiltinMacro()) {
Chris Lattner44f8a662006-07-03 01:27:27 +00001380 // Error if defining "__LINE__" and other builtins: C99 6.10.8.4.
Chris Lattnere8eef322006-07-08 07:01:00 +00001381 if (isDefineUndef == 1)
1382 Diag(MacroNameTok, diag::pp_redef_builtin_macro);
1383 else
1384 Diag(MacroNameTok, diag::pp_undef_builtin_macro);
Chris Lattner22eb9722006-06-18 05:43:12 +00001385 } else {
1386 // Okay, we got a good identifier node. Return it.
Chris Lattnercb283342006-06-18 06:48:37 +00001387 return;
Chris Lattner22eb9722006-06-18 05:43:12 +00001388 }
1389
Chris Lattner22eb9722006-06-18 05:43:12 +00001390 // Invalid macro name, read and discard the rest of the line. Then set the
1391 // token kind to tok::eom.
Chris Lattner8c204872006-10-14 05:19:21 +00001392 MacroNameTok.setKind(tok::eom);
Chris Lattner22eb9722006-06-18 05:43:12 +00001393 return DiscardUntilEndOfDirective();
1394}
1395
1396/// CheckEndOfDirective - Ensure that the next token is a tok::eom token. If
1397/// not, emit a diagnostic and consume up until the eom.
Chris Lattnercb283342006-06-18 06:48:37 +00001398void Preprocessor::CheckEndOfDirective(const char *DirType) {
Chris Lattner146762e2007-07-20 16:59:19 +00001399 Token Tmp;
Chris Lattnercb283342006-06-18 06:48:37 +00001400 Lex(Tmp);
Chris Lattner22eb9722006-06-18 05:43:12 +00001401 // There should be no tokens after the directive, but we allow them as an
1402 // extension.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001403 while (Tmp.is(tok::comment)) // Skip comments in -C mode.
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001404 Lex(Tmp);
1405
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001406 if (Tmp.isNot(tok::eom)) {
Chris Lattnercb283342006-06-18 06:48:37 +00001407 Diag(Tmp, diag::ext_pp_extra_tokens_at_eol, DirType);
1408 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001409 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001410}
1411
1412
1413
1414/// SkipExcludedConditionalBlock - We just read a #if or related directive and
1415/// decided that the subsequent tokens are in the #if'd out portion of the
1416/// file. Lex the rest of the file, until we see an #endif. If
1417/// FoundNonSkipPortion is true, then we have already emitted code for part of
1418/// this #if directive, so #else/#elif blocks should never be entered. If ElseOk
1419/// is true, then #else directives are ok, if not, then we have already seen one
1420/// so a #else directive is a duplicate. When this returns, the caller can lex
1421/// the first valid token.
Chris Lattnerd01e2912006-06-18 16:22:51 +00001422void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
Chris Lattner22eb9722006-06-18 05:43:12 +00001423 bool FoundNonSkipPortion,
1424 bool FoundElse) {
1425 ++NumSkipped;
Chris Lattner69772b02006-07-02 20:34:39 +00001426 assert(CurMacroExpander == 0 && CurLexer &&
Chris Lattner22eb9722006-06-18 05:43:12 +00001427 "Lexing a macro, not a file?");
1428
1429 CurLexer->pushConditionalLevel(IfTokenLoc, /*isSkipping*/false,
1430 FoundNonSkipPortion, FoundElse);
1431
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001432 // Enter raw mode to disable identifier lookup (and thus macro expansion),
1433 // disabling warnings, etc.
1434 CurLexer->LexingRawMode = true;
Chris Lattner146762e2007-07-20 16:59:19 +00001435 Token Tok;
Chris Lattner22eb9722006-06-18 05:43:12 +00001436 while (1) {
Chris Lattnercb283342006-06-18 06:48:37 +00001437 CurLexer->Lex(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001438
Chris Lattnerd8aee0e2006-07-11 05:04:55 +00001439 // If this is the end of the buffer, we have an error.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001440 if (Tok.is(tok::eof)) {
Chris Lattnerd8aee0e2006-07-11 05:04:55 +00001441 // Emit errors for each unterminated conditional on the stack, including
1442 // the current one.
1443 while (!CurLexer->ConditionalStack.empty()) {
1444 Diag(CurLexer->ConditionalStack.back().IfLoc,
1445 diag::err_pp_unterminated_conditional);
1446 CurLexer->ConditionalStack.pop_back();
1447 }
1448
1449 // Just return and let the caller lex after this #include.
1450 break;
1451 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001452
1453 // If this token is not a preprocessor directive, just skip it.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001454 if (Tok.isNot(tok::hash) || !Tok.isAtStartOfLine())
Chris Lattner22eb9722006-06-18 05:43:12 +00001455 continue;
1456
1457 // We just parsed a # character at the start of a line, so we're in
1458 // directive mode. Tell the lexer this so any newlines we see will be
1459 // converted into an EOM token (this terminates the macro).
1460 CurLexer->ParsingPreprocessorDirective = true;
Chris Lattner457fc152006-07-29 06:30:25 +00001461 CurLexer->KeepCommentMode = false;
1462
Chris Lattner22eb9722006-06-18 05:43:12 +00001463
1464 // Read the next token, the directive flavor.
Chris Lattnercb283342006-06-18 06:48:37 +00001465 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001466
1467 // If this isn't an identifier directive (e.g. is "# 1\n" or "#\n", or
1468 // something bogus), skip it.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001469 if (Tok.isNot(tok::identifier)) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001470 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001471 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001472 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001473 continue;
1474 }
Chris Lattnere60165f2006-06-22 06:36:29 +00001475
Chris Lattner22eb9722006-06-18 05:43:12 +00001476 // If the first letter isn't i or e, it isn't intesting to us. We know that
1477 // this is safe in the face of spelling differences, because there is no way
1478 // to spell an i/e in a strange way that is another letter. Skipping this
Chris Lattnere60165f2006-06-22 06:36:29 +00001479 // allows us to avoid looking up the identifier info for #define/#undef and
1480 // other common directives.
1481 const char *RawCharData = SourceMgr.getCharacterData(Tok.getLocation());
1482 char FirstChar = RawCharData[0];
Chris Lattner22eb9722006-06-18 05:43:12 +00001483 if (FirstChar >= 'a' && FirstChar <= 'z' &&
1484 FirstChar != 'i' && FirstChar != 'e') {
1485 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001486 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001487 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001488 continue;
1489 }
1490
Chris Lattnere60165f2006-06-22 06:36:29 +00001491 // Get the identifier name without trigraphs or embedded newlines. Note
1492 // that we can't use Tok.getIdentifierInfo() because its lookup is disabled
1493 // when skipping.
1494 // TODO: could do this with zero copies in the no-clean case by using
1495 // strncmp below.
1496 char Directive[20];
1497 unsigned IdLen;
1498 if (!Tok.needsCleaning() && Tok.getLength() < 20) {
1499 IdLen = Tok.getLength();
1500 memcpy(Directive, RawCharData, IdLen);
1501 Directive[IdLen] = 0;
1502 } else {
1503 std::string DirectiveStr = getSpelling(Tok);
1504 IdLen = DirectiveStr.size();
1505 if (IdLen >= 20) {
1506 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001507 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001508 CurLexer->KeepCommentMode = KeepComments;
Chris Lattnere60165f2006-06-22 06:36:29 +00001509 continue;
1510 }
1511 memcpy(Directive, &DirectiveStr[0], IdLen);
1512 Directive[IdLen] = 0;
1513 }
1514
Chris Lattner22eb9722006-06-18 05:43:12 +00001515 if (FirstChar == 'i' && Directive[1] == 'f') {
Chris Lattnere60165f2006-06-22 06:36:29 +00001516 if ((IdLen == 2) || // "if"
1517 (IdLen == 5 && !strcmp(Directive+2, "def")) || // "ifdef"
1518 (IdLen == 6 && !strcmp(Directive+2, "ndef"))) { // "ifndef"
Chris Lattner22eb9722006-06-18 05:43:12 +00001519 // We know the entire #if/#ifdef/#ifndef block will be skipped, don't
1520 // bother parsing the condition.
Chris Lattnercb283342006-06-18 06:48:37 +00001521 DiscardUntilEndOfDirective();
Chris Lattner50b497e2006-06-18 16:32:35 +00001522 CurLexer->pushConditionalLevel(Tok.getLocation(), /*wasskipping*/true,
Chris Lattnerd01e2912006-06-18 16:22:51 +00001523 /*foundnonskip*/false,
1524 /*fnddelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00001525 }
1526 } else if (FirstChar == 'e') {
Chris Lattnere60165f2006-06-22 06:36:29 +00001527 if (IdLen == 5 && !strcmp(Directive+1, "ndif")) { // "endif"
Chris Lattnercb283342006-06-18 06:48:37 +00001528 CheckEndOfDirective("#endif");
Chris Lattner22eb9722006-06-18 05:43:12 +00001529 PPConditionalInfo CondInfo;
1530 CondInfo.WasSkipping = true; // Silence bogus warning.
1531 bool InCond = CurLexer->popConditionalLevel(CondInfo);
Chris Lattnercf6bc662006-11-05 07:59:08 +00001532 InCond = InCond; // Silence warning in no-asserts mode.
Chris Lattner22eb9722006-06-18 05:43:12 +00001533 assert(!InCond && "Can't be skipping if not in a conditional!");
1534
1535 // If we popped the outermost skipping block, we're done skipping!
1536 if (!CondInfo.WasSkipping)
1537 break;
Chris Lattnere60165f2006-06-22 06:36:29 +00001538 } else if (IdLen == 4 && !strcmp(Directive+1, "lse")) { // "else".
Chris Lattner22eb9722006-06-18 05:43:12 +00001539 // #else directive in a skipping conditional. If not in some other
1540 // skipping conditional, and if #else hasn't already been seen, enter it
1541 // as a non-skipping conditional.
Chris Lattnercb283342006-06-18 06:48:37 +00001542 CheckEndOfDirective("#else");
Chris Lattner22eb9722006-06-18 05:43:12 +00001543 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1544
1545 // If this is a #else with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00001546 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_else_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00001547
1548 // Note that we've seen a #else in this conditional.
1549 CondInfo.FoundElse = true;
1550
1551 // If the conditional is at the top level, and the #if block wasn't
1552 // entered, enter the #else block now.
1553 if (!CondInfo.WasSkipping && !CondInfo.FoundNonSkip) {
1554 CondInfo.FoundNonSkip = true;
1555 break;
1556 }
Chris Lattnere60165f2006-06-22 06:36:29 +00001557 } else if (IdLen == 4 && !strcmp(Directive+1, "lif")) { // "elif".
Chris Lattner22eb9722006-06-18 05:43:12 +00001558 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1559
1560 bool ShouldEnter;
1561 // If this is in a skipping block or if we're already handled this #if
1562 // block, don't bother parsing the condition.
1563 if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) {
Chris Lattnercb283342006-06-18 06:48:37 +00001564 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001565 ShouldEnter = false;
1566 } else {
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001567 // Restore the value of LexingRawMode so that identifiers are
Chris Lattner22eb9722006-06-18 05:43:12 +00001568 // looked up, etc, inside the #elif expression.
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001569 assert(CurLexer->LexingRawMode && "We have to be skipping here!");
1570 CurLexer->LexingRawMode = false;
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001571 IdentifierInfo *IfNDefMacro = 0;
Chris Lattnera8654ca2006-07-04 17:42:08 +00001572 ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro);
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001573 CurLexer->LexingRawMode = true;
Chris Lattner22eb9722006-06-18 05:43:12 +00001574 }
1575
1576 // If this is a #elif with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00001577 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_elif_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00001578
1579 // If this condition is true, enter it!
1580 if (ShouldEnter) {
1581 CondInfo.FoundNonSkip = true;
1582 break;
1583 }
1584 }
1585 }
1586
1587 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001588 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001589 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001590 }
1591
1592 // Finally, if we are out of the conditional (saw an #endif or ran off the end
1593 // of the file, just stop skipping and return to lexing whatever came after
1594 // the #if block.
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001595 CurLexer->LexingRawMode = false;
Chris Lattner22eb9722006-06-18 05:43:12 +00001596}
1597
1598//===----------------------------------------------------------------------===//
1599// Preprocessor Directive Handling.
1600//===----------------------------------------------------------------------===//
1601
1602/// HandleDirective - This callback is invoked when the lexer sees a # token
1603/// at the start of a line. This consumes the directive, modifies the
1604/// lexer/preprocessor state, and advances the lexer(s) so that the next token
1605/// read is the correct one.
Chris Lattner146762e2007-07-20 16:59:19 +00001606void Preprocessor::HandleDirective(Token &Result) {
Chris Lattner4d5e1a72006-07-03 01:01:29 +00001607 // FIXME: Traditional: # with whitespace before it not recognized by K&R?
Chris Lattner22eb9722006-06-18 05:43:12 +00001608
1609 // We just parsed a # character at the start of a line, so we're in directive
1610 // mode. Tell the lexer this so any newlines we see will be converted into an
Chris Lattner78186052006-07-09 00:45:31 +00001611 // EOM token (which terminates the directive).
Chris Lattner22eb9722006-06-18 05:43:12 +00001612 CurLexer->ParsingPreprocessorDirective = true;
1613
1614 ++NumDirectives;
1615
Chris Lattner371ac8a2006-07-04 07:11:10 +00001616 // We are about to read a token. For the multiple-include optimization FA to
1617 // work, we have to remember if we had read any tokens *before* this
1618 // pp-directive.
1619 bool ReadAnyTokensBeforeDirective = CurLexer->MIOpt.getHasReadAnyTokensVal();
1620
Chris Lattner78186052006-07-09 00:45:31 +00001621 // Read the next token, the directive flavor. This isn't expanded due to
1622 // C99 6.10.3p8.
Chris Lattnercb283342006-06-18 06:48:37 +00001623 LexUnexpandedToken(Result);
Chris Lattner22eb9722006-06-18 05:43:12 +00001624
Chris Lattner78186052006-07-09 00:45:31 +00001625 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.:
1626 // #define A(x) #x
1627 // A(abc
1628 // #warning blah
1629 // def)
1630 // If so, the user is relying on non-portable behavior, emit a diagnostic.
Chris Lattneree8760b2006-07-15 07:42:55 +00001631 if (InMacroArgs)
Chris Lattner78186052006-07-09 00:45:31 +00001632 Diag(Result, diag::ext_embedded_directive);
1633
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001634TryAgain:
Chris Lattner22eb9722006-06-18 05:43:12 +00001635 switch (Result.getKind()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001636 case tok::eom:
Chris Lattnercb283342006-06-18 06:48:37 +00001637 return; // null directive.
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001638 case tok::comment:
1639 // Handle stuff like "# /*foo*/ define X" in -E -C mode.
1640 LexUnexpandedToken(Result);
1641 goto TryAgain;
Chris Lattner22eb9722006-06-18 05:43:12 +00001642
Chris Lattner22eb9722006-06-18 05:43:12 +00001643 case tok::numeric_constant:
1644 // FIXME: implement # 7 line numbers!
Chris Lattner6e5b2a02006-10-17 02:53:32 +00001645 DiscardUntilEndOfDirective();
1646 return;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001647 default:
1648 IdentifierInfo *II = Result.getIdentifierInfo();
1649 if (II == 0) break; // Not an identifier.
1650
1651 // Ask what the preprocessor keyword ID is.
1652 switch (II->getPPKeywordID()) {
1653 default: break;
1654 // C99 6.10.1 - Conditional Inclusion.
1655 case tok::pp_if:
1656 return HandleIfDirective(Result, ReadAnyTokensBeforeDirective);
1657 case tok::pp_ifdef:
1658 return HandleIfdefDirective(Result, false, true/*not valid for miopt*/);
1659 case tok::pp_ifndef:
1660 return HandleIfdefDirective(Result, true, ReadAnyTokensBeforeDirective);
1661 case tok::pp_elif:
1662 return HandleElifDirective(Result);
1663 case tok::pp_else:
1664 return HandleElseDirective(Result);
1665 case tok::pp_endif:
1666 return HandleEndifDirective(Result);
1667
1668 // C99 6.10.2 - Source File Inclusion.
1669 case tok::pp_include:
1670 return HandleIncludeDirective(Result); // Handle #include.
1671
1672 // C99 6.10.3 - Macro Replacement.
1673 case tok::pp_define:
1674 return HandleDefineDirective(Result, false);
1675 case tok::pp_undef:
1676 return HandleUndefDirective(Result);
1677
1678 // C99 6.10.4 - Line Control.
1679 case tok::pp_line:
1680 // FIXME: implement #line
1681 DiscardUntilEndOfDirective();
1682 return;
1683
1684 // C99 6.10.5 - Error Directive.
1685 case tok::pp_error:
1686 return HandleUserDiagnosticDirective(Result, false);
1687
1688 // C99 6.10.6 - Pragma Directive.
1689 case tok::pp_pragma:
1690 return HandlePragmaDirective();
1691
1692 // GNU Extensions.
1693 case tok::pp_import:
1694 return HandleImportDirective(Result);
1695 case tok::pp_include_next:
1696 return HandleIncludeNextDirective(Result);
1697
1698 case tok::pp_warning:
1699 Diag(Result, diag::ext_pp_warning_directive);
1700 return HandleUserDiagnosticDirective(Result, true);
1701 case tok::pp_ident:
1702 return HandleIdentSCCSDirective(Result);
1703 case tok::pp_sccs:
1704 return HandleIdentSCCSDirective(Result);
1705 case tok::pp_assert:
1706 //isExtension = true; // FIXME: implement #assert
Chris Lattner22eb9722006-06-18 05:43:12 +00001707 break;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001708 case tok::pp_unassert:
1709 //isExtension = true; // FIXME: implement #unassert
Chris Lattner22eb9722006-06-18 05:43:12 +00001710 break;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001711
1712 // clang extensions.
1713 case tok::pp_define_target:
1714 return HandleDefineDirective(Result, true);
1715 case tok::pp_define_other_target:
1716 return HandleDefineOtherTargetDirective(Result);
Chris Lattner22eb9722006-06-18 05:43:12 +00001717 }
1718 break;
1719 }
1720
1721 // If we reached here, the preprocessing token is not valid!
Chris Lattnercb283342006-06-18 06:48:37 +00001722 Diag(Result, diag::err_pp_invalid_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001723
1724 // Read the rest of the PP line.
Chris Lattner371ac8a2006-07-04 07:11:10 +00001725 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001726
1727 // Okay, we're done parsing the directive.
Chris Lattner22eb9722006-06-18 05:43:12 +00001728}
1729
Chris Lattner146762e2007-07-20 16:59:19 +00001730void Preprocessor::HandleUserDiagnosticDirective(Token &Tok,
Chris Lattner22eb9722006-06-18 05:43:12 +00001731 bool isWarning) {
1732 // Read the rest of the line raw. We do this because we don't want macros
1733 // to be expanded and we don't require that the tokens be valid preprocessing
1734 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does
1735 // collapse multiple consequtive white space between tokens, but this isn't
1736 // specified by the standard.
1737 std::string Message = CurLexer->ReadToEndOfLine();
1738
1739 unsigned DiagID = isWarning ? diag::pp_hash_warning : diag::err_pp_hash_error;
Chris Lattner01d66cc2006-07-03 22:16:27 +00001740 return Diag(Tok, DiagID, Message);
1741}
1742
1743/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.
1744///
Chris Lattner146762e2007-07-20 16:59:19 +00001745void Preprocessor::HandleIdentSCCSDirective(Token &Tok) {
Chris Lattner371ac8a2006-07-04 07:11:10 +00001746 // Yes, this directive is an extension.
Chris Lattner01d66cc2006-07-03 22:16:27 +00001747 Diag(Tok, diag::ext_pp_ident_directive);
1748
Chris Lattner371ac8a2006-07-04 07:11:10 +00001749 // Read the string argument.
Chris Lattner146762e2007-07-20 16:59:19 +00001750 Token StrTok;
Chris Lattner01d66cc2006-07-03 22:16:27 +00001751 Lex(StrTok);
1752
1753 // If the token kind isn't a string, it's a malformed directive.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001754 if (StrTok.isNot(tok::string_literal) &&
1755 StrTok.isNot(tok::wide_string_literal))
Chris Lattner01d66cc2006-07-03 22:16:27 +00001756 return Diag(StrTok, diag::err_pp_malformed_ident);
1757
1758 // Verify that there is nothing after the string, other than EOM.
1759 CheckEndOfDirective("#ident");
1760
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001761 if (Callbacks)
1762 Callbacks->Ident(Tok.getLocation(), getSpelling(StrTok));
Chris Lattner22eb9722006-06-18 05:43:12 +00001763}
1764
Chris Lattnerb8761832006-06-24 21:31:03 +00001765//===----------------------------------------------------------------------===//
1766// Preprocessor Include Directive Handling.
1767//===----------------------------------------------------------------------===//
1768
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001769/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully
1770/// checked and spelled filename, e.g. as an operand of #include. This returns
1771/// true if the input filename was in <>'s or false if it were in ""'s. The
1772/// caller is expected to provide a buffer that is large enough to hold the
1773/// spelling of the filename, but is also expected to handle the case when
1774/// this method decides to use a different buffer.
Chris Lattner93ab9f12007-07-23 04:15:27 +00001775bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc,
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001776 const char *&BufStart,
1777 const char *&BufEnd) {
1778 // Get the text form of the filename.
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001779 assert(BufStart != BufEnd && "Can't have tokens with empty spellings!");
1780
1781 // Make sure the filename is <x> or "x".
1782 bool isAngled;
1783 if (BufStart[0] == '<') {
1784 if (BufEnd[-1] != '>') {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001785 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001786 BufStart = 0;
1787 return true;
1788 }
1789 isAngled = true;
1790 } else if (BufStart[0] == '"') {
1791 if (BufEnd[-1] != '"') {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001792 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001793 BufStart = 0;
1794 return true;
1795 }
1796 isAngled = false;
1797 } else {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001798 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001799 BufStart = 0;
1800 return true;
1801 }
1802
1803 // Diagnose #include "" as invalid.
1804 if (BufEnd-BufStart <= 2) {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001805 Diag(Loc, diag::err_pp_empty_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001806 BufStart = 0;
1807 return "";
1808 }
1809
1810 // Skip the brackets.
1811 ++BufStart;
1812 --BufEnd;
1813 return isAngled;
1814}
1815
Chris Lattner43eafb42007-07-23 04:56:47 +00001816/// ConcatenateIncludeName - Handle cases where the #include name is expanded
1817/// from a macro as multiple tokens, which need to be glued together. This
1818/// occurs for code like:
1819/// #define FOO <a/b.h>
1820/// #include FOO
1821/// because in this case, "<a/b.h>" is returned as 7 tokens, not one.
1822///
1823/// This code concatenates and consumes tokens up to the '>' token. It returns
1824/// false if the > was found, otherwise it returns true if it finds and consumes
1825/// the EOM marker.
1826static bool ConcatenateIncludeName(llvm::SmallVector<char, 128> &FilenameBuffer,
1827 Preprocessor &PP) {
1828 Token CurTok;
1829
1830 PP.Lex(CurTok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001831 while (CurTok.isNot(tok::eom)) {
Chris Lattner43eafb42007-07-23 04:56:47 +00001832 // Append the spelling of this token to the buffer. If there was a space
1833 // before it, add it now.
1834 if (CurTok.hasLeadingSpace())
1835 FilenameBuffer.push_back(' ');
1836
1837 // Get the spelling of the token, directly into FilenameBuffer if possible.
1838 unsigned PreAppendSize = FilenameBuffer.size();
1839 FilenameBuffer.resize(PreAppendSize+CurTok.getLength());
1840
1841 const char *BufPtr = &FilenameBuffer[PreAppendSize];
1842 unsigned ActualLen = PP.getSpelling(CurTok, BufPtr);
1843
1844 // If the token was spelled somewhere else, copy it into FilenameBuffer.
1845 if (BufPtr != &FilenameBuffer[PreAppendSize])
1846 memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen);
1847
1848 // Resize FilenameBuffer to the correct size.
1849 if (CurTok.getLength() != ActualLen)
1850 FilenameBuffer.resize(PreAppendSize+ActualLen);
1851
1852 // If we found the '>' marker, return success.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001853 if (CurTok.is(tok::greater))
Chris Lattner43eafb42007-07-23 04:56:47 +00001854 return false;
1855
1856 PP.Lex(CurTok);
1857 }
1858
1859 // If we hit the eom marker, emit an error and return true so that the caller
1860 // knows the EOM has been read.
1861 PP.Diag(CurTok.getLocation(), diag::err_pp_expects_filename);
1862 return true;
1863}
1864
Chris Lattner22eb9722006-06-18 05:43:12 +00001865/// HandleIncludeDirective - The "#include" tokens have just been read, read the
1866/// file to be included from the lexer, then include it! This is a common
1867/// routine with functionality shared between #include, #include_next and
1868/// #import.
Chris Lattner146762e2007-07-20 16:59:19 +00001869void Preprocessor::HandleIncludeDirective(Token &IncludeTok,
Chris Lattner22eb9722006-06-18 05:43:12 +00001870 const DirectoryLookup *LookupFrom,
1871 bool isImport) {
Chris Lattner371ac8a2006-07-04 07:11:10 +00001872
Chris Lattner146762e2007-07-20 16:59:19 +00001873 Token FilenameTok;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001874 CurLexer->LexIncludeFilename(FilenameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001875
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001876 // Reserve a buffer to get the spelling.
Chris Lattner23b7eb62007-06-15 23:05:46 +00001877 llvm::SmallVector<char, 128> FilenameBuffer;
Chris Lattner43eafb42007-07-23 04:56:47 +00001878 const char *FilenameStart, *FilenameEnd;
1879
1880 switch (FilenameTok.getKind()) {
1881 case tok::eom:
1882 // If the token kind is EOM, the error has already been diagnosed.
1883 return;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001884
Chris Lattner43eafb42007-07-23 04:56:47 +00001885 case tok::angle_string_literal:
Chris Lattnerf97dbcb2007-07-23 22:23:52 +00001886 case tok::string_literal: {
Chris Lattner43eafb42007-07-23 04:56:47 +00001887 FilenameBuffer.resize(FilenameTok.getLength());
1888 FilenameStart = &FilenameBuffer[0];
1889 unsigned Len = getSpelling(FilenameTok, FilenameStart);
1890 FilenameEnd = FilenameStart+Len;
1891 break;
Chris Lattnerf97dbcb2007-07-23 22:23:52 +00001892 }
Chris Lattner43eafb42007-07-23 04:56:47 +00001893
1894 case tok::less:
1895 // This could be a <foo/bar.h> file coming from a macro expansion. In this
1896 // case, glue the tokens together into FilenameBuffer and interpret those.
1897 FilenameBuffer.push_back('<');
1898 if (ConcatenateIncludeName(FilenameBuffer, *this))
1899 return; // Found <eom> but no ">"? Diagnostic already emitted.
1900 FilenameStart = &FilenameBuffer[0];
1901 FilenameEnd = &FilenameBuffer[FilenameBuffer.size()];
1902 break;
1903 default:
1904 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);
1905 DiscardUntilEndOfDirective();
1906 return;
1907 }
1908
Chris Lattner93ab9f12007-07-23 04:15:27 +00001909 bool isAngled = GetIncludeFilenameSpelling(FilenameTok.getLocation(),
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001910 FilenameStart, FilenameEnd);
1911 // If GetIncludeFilenameSpelling set the start ptr to null, there was an
1912 // error.
Chris Lattner43eafb42007-07-23 04:56:47 +00001913 if (FilenameStart == 0) {
1914 DiscardUntilEndOfDirective();
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001915 return;
Chris Lattner43eafb42007-07-23 04:56:47 +00001916 }
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001917
Chris Lattner269c2322006-06-25 06:23:00 +00001918 // Verify that there is nothing after the filename, other than EOM. Use the
1919 // preprocessor to lex this in case lexing the filename entered a macro.
1920 CheckEndOfDirective("#include");
Chris Lattner22eb9722006-06-18 05:43:12 +00001921
1922 // Check that we don't have infinite #include recursion.
Chris Lattner69772b02006-07-02 20:34:39 +00001923 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1)
Chris Lattner22eb9722006-06-18 05:43:12 +00001924 return Diag(FilenameTok, diag::err_pp_include_too_deep);
1925
Chris Lattner22eb9722006-06-18 05:43:12 +00001926 // Search include directories.
Chris Lattnerc8997182006-06-22 05:52:16 +00001927 const DirectoryLookup *CurDir;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001928 const FileEntry *File = LookupFile(FilenameStart, FilenameEnd,
Chris Lattnerb8b94f12006-10-30 05:38:06 +00001929 isAngled, LookupFrom, CurDir);
Chris Lattner22eb9722006-06-18 05:43:12 +00001930 if (File == 0)
Chris Lattner7c718bd2007-04-10 06:02:46 +00001931 return Diag(FilenameTok, diag::err_pp_file_not_found,
1932 std::string(FilenameStart, FilenameEnd));
Chris Lattner22eb9722006-06-18 05:43:12 +00001933
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001934 // Ask HeaderInfo if we should enter this #include file.
1935 if (!HeaderInfo.ShouldEnterIncludeFile(File, isImport)) {
1936 // If it returns true, #including this file will have no effect.
Chris Lattner3665f162006-07-04 07:26:10 +00001937 return;
1938 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001939
1940 // Look up the file, create a File ID for it.
Chris Lattner371ac8a2006-07-04 07:11:10 +00001941 unsigned FileID = SourceMgr.createFileID(File, FilenameTok.getLocation());
Chris Lattner22eb9722006-06-18 05:43:12 +00001942 if (FileID == 0)
Chris Lattner7c718bd2007-04-10 06:02:46 +00001943 return Diag(FilenameTok, diag::err_pp_file_not_found,
1944 std::string(FilenameStart, FilenameEnd));
Chris Lattner22eb9722006-06-18 05:43:12 +00001945
1946 // Finally, if all is good, enter the new file!
Chris Lattnerc8997182006-06-22 05:52:16 +00001947 EnterSourceFile(FileID, CurDir);
Chris Lattner22eb9722006-06-18 05:43:12 +00001948}
1949
1950/// HandleIncludeNextDirective - Implements #include_next.
1951///
Chris Lattner146762e2007-07-20 16:59:19 +00001952void Preprocessor::HandleIncludeNextDirective(Token &IncludeNextTok) {
Chris Lattnercb283342006-06-18 06:48:37 +00001953 Diag(IncludeNextTok, diag::ext_pp_include_next_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001954
1955 // #include_next is like #include, except that we start searching after
1956 // the current found directory. If we can't do this, issue a
1957 // diagnostic.
Chris Lattnerc8997182006-06-22 05:52:16 +00001958 const DirectoryLookup *Lookup = CurDirLookup;
Chris Lattner69772b02006-07-02 20:34:39 +00001959 if (isInPrimaryFile()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001960 Lookup = 0;
Chris Lattnercb283342006-06-18 06:48:37 +00001961 Diag(IncludeNextTok, diag::pp_include_next_in_primary);
Chris Lattner22eb9722006-06-18 05:43:12 +00001962 } else if (Lookup == 0) {
Chris Lattnercb283342006-06-18 06:48:37 +00001963 Diag(IncludeNextTok, diag::pp_include_next_absolute_path);
Chris Lattnerc8997182006-06-22 05:52:16 +00001964 } else {
1965 // Start looking up in the next directory.
1966 ++Lookup;
Chris Lattner22eb9722006-06-18 05:43:12 +00001967 }
1968
1969 return HandleIncludeDirective(IncludeNextTok, Lookup);
1970}
1971
1972/// HandleImportDirective - Implements #import.
1973///
Chris Lattner146762e2007-07-20 16:59:19 +00001974void Preprocessor::HandleImportDirective(Token &ImportTok) {
Chris Lattnercb283342006-06-18 06:48:37 +00001975 Diag(ImportTok, diag::ext_pp_import_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001976
1977 return HandleIncludeDirective(ImportTok, 0, true);
1978}
1979
Chris Lattnerb8761832006-06-24 21:31:03 +00001980//===----------------------------------------------------------------------===//
1981// Preprocessor Macro Directive Handling.
1982//===----------------------------------------------------------------------===//
1983
Chris Lattnercefc7682006-07-08 08:28:12 +00001984/// ReadMacroDefinitionArgList - The ( starting an argument list of a macro
1985/// definition has just been read. Lex the rest of the arguments and the
1986/// closing ), updating MI with what we learn. Return true if an error occurs
1987/// parsing the arg list.
1988bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI) {
Chris Lattner564f4782007-07-14 22:46:43 +00001989 llvm::SmallVector<IdentifierInfo*, 32> Arguments;
1990
Chris Lattner146762e2007-07-20 16:59:19 +00001991 Token Tok;
Chris Lattnercefc7682006-07-08 08:28:12 +00001992 while (1) {
1993 LexUnexpandedToken(Tok);
1994 switch (Tok.getKind()) {
1995 case tok::r_paren:
1996 // Found the end of the argument list.
Chris Lattner564f4782007-07-14 22:46:43 +00001997 if (Arguments.empty()) { // #define FOO()
1998 MI->setArgumentList(Arguments.begin(), Arguments.end());
1999 return false;
2000 }
Chris Lattnercefc7682006-07-08 08:28:12 +00002001 // Otherwise we have #define FOO(A,)
2002 Diag(Tok, diag::err_pp_expected_ident_in_arg_list);
2003 return true;
2004 case tok::ellipsis: // #define X(... -> C99 varargs
2005 // Warn if use of C99 feature in non-C99 mode.
2006 if (!Features.C99) Diag(Tok, diag::ext_variadic_macro);
2007
2008 // Lex the token after the identifier.
2009 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002010 if (Tok.isNot(tok::r_paren)) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002011 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2012 return true;
2013 }
Chris Lattner95a06b32006-07-30 08:40:43 +00002014 // Add the __VA_ARGS__ identifier as an argument.
Chris Lattner564f4782007-07-14 22:46:43 +00002015 Arguments.push_back(Ident__VA_ARGS__);
Chris Lattnercefc7682006-07-08 08:28:12 +00002016 MI->setIsC99Varargs();
Chris Lattner564f4782007-07-14 22:46:43 +00002017 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002018 return false;
2019 case tok::eom: // #define X(
2020 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2021 return true;
Chris Lattner62aa0d42006-10-20 05:08:24 +00002022 default:
2023 // Handle keywords and identifiers here to accept things like
2024 // #define Foo(for) for.
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002025 IdentifierInfo *II = Tok.getIdentifierInfo();
Chris Lattner62aa0d42006-10-20 05:08:24 +00002026 if (II == 0) {
2027 // #define X(1
2028 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);
2029 return true;
2030 }
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002031
2032 // If this is already used as an argument, it is used multiple times (e.g.
2033 // #define X(A,A.
Chris Lattner564f4782007-07-14 22:46:43 +00002034 if (std::find(Arguments.begin(), Arguments.end(), II) !=
2035 Arguments.end()) { // C99 6.10.3p6
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002036 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list, II->getName());
2037 return true;
2038 }
2039
2040 // Add the argument to the macro info.
Chris Lattner564f4782007-07-14 22:46:43 +00002041 Arguments.push_back(II);
Chris Lattnercefc7682006-07-08 08:28:12 +00002042
2043 // Lex the token after the identifier.
2044 LexUnexpandedToken(Tok);
2045
2046 switch (Tok.getKind()) {
2047 default: // #define X(A B
2048 Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
2049 return true;
2050 case tok::r_paren: // #define X(A)
Chris Lattner564f4782007-07-14 22:46:43 +00002051 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002052 return false;
2053 case tok::comma: // #define X(A,
2054 break;
2055 case tok::ellipsis: // #define X(A... -> GCC extension
2056 // Diagnose extension.
2057 Diag(Tok, diag::ext_named_variadic_macro);
2058
2059 // Lex the token after the identifier.
2060 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002061 if (Tok.isNot(tok::r_paren)) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002062 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2063 return true;
2064 }
2065
2066 MI->setIsGNUVarargs();
Chris Lattner564f4782007-07-14 22:46:43 +00002067 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002068 return false;
2069 }
2070 }
2071 }
2072}
2073
Chris Lattner22eb9722006-06-18 05:43:12 +00002074/// HandleDefineDirective - Implements #define. This consumes the entire macro
Chris Lattner81278c62006-10-14 19:03:49 +00002075/// line then lets the caller lex the next real token. If 'isTargetSpecific' is
2076/// true, then this is a "#define_target", otherwise this is a "#define".
Chris Lattner22eb9722006-06-18 05:43:12 +00002077///
Chris Lattner146762e2007-07-20 16:59:19 +00002078void Preprocessor::HandleDefineDirective(Token &DefineTok,
Chris Lattner81278c62006-10-14 19:03:49 +00002079 bool isTargetSpecific) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002080 ++NumDefined;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002081
Chris Lattner146762e2007-07-20 16:59:19 +00002082 Token MacroNameTok;
Chris Lattnere8eef322006-07-08 07:01:00 +00002083 ReadMacroName(MacroNameTok, 1);
Chris Lattner22eb9722006-06-18 05:43:12 +00002084
2085 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002086 if (MacroNameTok.is(tok::eom))
Chris Lattnercb283342006-06-18 06:48:37 +00002087 return;
Chris Lattnerf40fe992007-07-14 22:11:41 +00002088
Chris Lattner457fc152006-07-29 06:30:25 +00002089 // If we are supposed to keep comments in #defines, reenable comment saving
2090 // mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00002091 CurLexer->KeepCommentMode = KeepMacroComments;
Chris Lattner457fc152006-07-29 06:30:25 +00002092
Chris Lattner063400e2006-10-14 19:54:15 +00002093 // Create the new macro.
Chris Lattner50b497e2006-06-18 16:32:35 +00002094 MacroInfo *MI = new MacroInfo(MacroNameTok.getLocation());
Chris Lattner81278c62006-10-14 19:03:49 +00002095 if (isTargetSpecific) MI->setIsTargetSpecific();
Chris Lattner22eb9722006-06-18 05:43:12 +00002096
Chris Lattner063400e2006-10-14 19:54:15 +00002097 // If the identifier is an 'other target' macro, clear this bit.
2098 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2099
2100
Chris Lattner146762e2007-07-20 16:59:19 +00002101 Token Tok;
Chris Lattnercb283342006-06-18 06:48:37 +00002102 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002103
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002104 // If this is a function-like macro definition, parse the argument list,
2105 // marking each of the identifiers as being used as macro arguments. Also,
2106 // check other constraints on the first token of the macro body.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002107 if (Tok.is(tok::eom)) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002108 // If there is no body to this macro, we have no special handling here.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002109 } else if (Tok.is(tok::l_paren) && !Tok.hasLeadingSpace()) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002110 // This is a function-like macro definition. Read the argument list.
2111 MI->setIsFunctionLike();
2112 if (ReadMacroDefinitionArgList(MI)) {
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002113 // Forget about MI.
Chris Lattnercefc7682006-07-08 08:28:12 +00002114 delete MI;
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002115 // Throw away the rest of the line.
Chris Lattnercefc7682006-07-08 08:28:12 +00002116 if (CurLexer->ParsingPreprocessorDirective)
2117 DiscardUntilEndOfDirective();
2118 return;
2119 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002120
Chris Lattner815a1f92006-07-08 20:48:04 +00002121 // Read the first token after the arg list for down below.
2122 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002123 } else if (!Tok.hasLeadingSpace()) {
2124 // C99 requires whitespace between the macro definition and the body. Emit
2125 // a diagnostic for something like "#define X+".
2126 if (Features.C99) {
Chris Lattnercb283342006-06-18 06:48:37 +00002127 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);
Chris Lattner22eb9722006-06-18 05:43:12 +00002128 } else {
2129 // FIXME: C90/C++ do not get this diagnostic, but it does get a similar
2130 // one in some cases!
2131 }
2132 } else {
2133 // This is a normal token with leading space. Clear the leading space
2134 // marker on the first token to get proper expansion.
Chris Lattner146762e2007-07-20 16:59:19 +00002135 Tok.clearFlag(Token::LeadingSpace);
Chris Lattner22eb9722006-06-18 05:43:12 +00002136 }
2137
Chris Lattner7e374832006-07-29 03:46:57 +00002138 // If this is a definition of a variadic C99 function-like macro, not using
2139 // the GNU named varargs extension, enabled __VA_ARGS__.
2140
2141 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
2142 // This gets unpoisoned where it is allowed.
2143 assert(Ident__VA_ARGS__->isPoisoned() && "__VA_ARGS__ should be poisoned!");
2144 if (MI->isC99Varargs())
2145 Ident__VA_ARGS__->setIsPoisoned(false);
2146
Chris Lattner22eb9722006-06-18 05:43:12 +00002147 // Read the rest of the macro body.
Chris Lattnera3834342007-07-14 21:54:03 +00002148 if (MI->isObjectLike()) {
2149 // Object-like macros are very simple, just read their body.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002150 while (Tok.isNot(tok::eom)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002151 MI->AddTokenToBody(Tok);
Chris Lattner815a1f92006-07-08 20:48:04 +00002152 // Get the next token of the macro.
2153 LexUnexpandedToken(Tok);
Chris Lattner815a1f92006-07-08 20:48:04 +00002154 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002155
Chris Lattnera3834342007-07-14 21:54:03 +00002156 } else {
2157 // Otherwise, read the body of a function-like macro. This has to validate
2158 // the # (stringize) operator.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002159 while (Tok.isNot(tok::eom)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002160 MI->AddTokenToBody(Tok);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002161
Chris Lattnera3834342007-07-14 21:54:03 +00002162 // Check C99 6.10.3.2p1: ensure that # operators are followed by macro
2163 // parameters in function-like macro expansions.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002164 if (Tok.isNot(tok::hash)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002165 // Get the next token of the macro.
2166 LexUnexpandedToken(Tok);
2167 continue;
2168 }
2169
2170 // Get the next token of the macro.
2171 LexUnexpandedToken(Tok);
2172
2173 // Not a macro arg identifier?
2174 if (!Tok.getIdentifierInfo() ||
2175 MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) {
2176 Diag(Tok, diag::err_pp_stringize_not_parameter);
2177 delete MI;
2178
2179 // Disable __VA_ARGS__ again.
2180 Ident__VA_ARGS__->setIsPoisoned(true);
2181 return;
2182 }
2183
2184 // Things look ok, add the param name token to the macro.
2185 MI->AddTokenToBody(Tok);
2186
2187 // Get the next token of the macro.
2188 LexUnexpandedToken(Tok);
2189 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002190 }
Chris Lattner7e374832006-07-29 03:46:57 +00002191
Chris Lattnerf40fe992007-07-14 22:11:41 +00002192
Chris Lattner7e374832006-07-29 03:46:57 +00002193 // Disable __VA_ARGS__ again.
2194 Ident__VA_ARGS__->setIsPoisoned(true);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002195
Chris Lattnerbff18d52006-07-06 04:49:18 +00002196 // Check that there is no paste (##) operator at the begining or end of the
2197 // replacement list.
Chris Lattner78186052006-07-09 00:45:31 +00002198 unsigned NumTokens = MI->getNumTokens();
Chris Lattnerbff18d52006-07-06 04:49:18 +00002199 if (NumTokens != 0) {
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002200 if (MI->getReplacementToken(0).is(tok::hashhash)) {
Chris Lattner815a1f92006-07-08 20:48:04 +00002201 Diag(MI->getReplacementToken(0), diag::err_paste_at_start);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002202 delete MI;
Chris Lattner815a1f92006-07-08 20:48:04 +00002203 return;
Chris Lattnerbff18d52006-07-06 04:49:18 +00002204 }
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002205 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) {
Chris Lattner815a1f92006-07-08 20:48:04 +00002206 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002207 delete MI;
Chris Lattner815a1f92006-07-08 20:48:04 +00002208 return;
Chris Lattnerbff18d52006-07-06 04:49:18 +00002209 }
2210 }
2211
Chris Lattner13044d92006-07-03 05:16:44 +00002212 // If this is the primary source file, remember that this macro hasn't been
2213 // used yet.
2214 if (isInPrimaryFile())
2215 MI->setIsUsed(false);
2216
Chris Lattner22eb9722006-06-18 05:43:12 +00002217 // Finally, if this identifier already had a macro defined for it, verify that
2218 // the macro bodies are identical and free the old definition.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002219 if (MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Chris Lattner13044d92006-07-03 05:16:44 +00002220 if (!OtherMI->isUsed())
2221 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);
2222
Chris Lattner22eb9722006-06-18 05:43:12 +00002223 // Macros must be identical. This means all tokes and whitespace separation
Chris Lattner21284df2006-07-08 07:16:08 +00002224 // must be the same. C99 6.10.3.2.
2225 if (!MI->isIdenticalTo(*OtherMI, *this)) {
Chris Lattnere8eef322006-07-08 07:01:00 +00002226 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef,
2227 MacroNameTok.getIdentifierInfo()->getName());
2228 Diag(OtherMI->getDefinitionLoc(), diag::ext_pp_macro_redef2);
2229 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002230 delete OtherMI;
2231 }
2232
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002233 setMacroInfo(MacroNameTok.getIdentifierInfo(), MI);
Chris Lattner22eb9722006-06-18 05:43:12 +00002234}
2235
Chris Lattner063400e2006-10-14 19:54:15 +00002236/// HandleDefineOtherTargetDirective - Implements #define_other_target.
Chris Lattner146762e2007-07-20 16:59:19 +00002237void Preprocessor::HandleDefineOtherTargetDirective(Token &Tok) {
2238 Token MacroNameTok;
Chris Lattner063400e2006-10-14 19:54:15 +00002239 ReadMacroName(MacroNameTok, 1);
2240
2241 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002242 if (MacroNameTok.is(tok::eom))
Chris Lattner063400e2006-10-14 19:54:15 +00002243 return;
2244
2245 // Check to see if this is the last token on the #undef line.
2246 CheckEndOfDirective("#define_other_target");
2247
2248 // If there is already a macro defined by this name, turn it into a
2249 // target-specific define.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002250 if (MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Chris Lattner063400e2006-10-14 19:54:15 +00002251 MI->setIsTargetSpecific(true);
2252 return;
2253 }
2254
2255 // Mark the identifier as being a macro on some other target.
2256 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro();
2257}
2258
Chris Lattner22eb9722006-06-18 05:43:12 +00002259
2260/// HandleUndefDirective - Implements #undef.
2261///
Chris Lattner146762e2007-07-20 16:59:19 +00002262void Preprocessor::HandleUndefDirective(Token &UndefTok) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002263 ++NumUndefined;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002264
Chris Lattner146762e2007-07-20 16:59:19 +00002265 Token MacroNameTok;
Chris Lattnere8eef322006-07-08 07:01:00 +00002266 ReadMacroName(MacroNameTok, 2);
Chris Lattner22eb9722006-06-18 05:43:12 +00002267
2268 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002269 if (MacroNameTok.is(tok::eom))
Chris Lattnercb283342006-06-18 06:48:37 +00002270 return;
Chris Lattner22eb9722006-06-18 05:43:12 +00002271
2272 // Check to see if this is the last token on the #undef line.
Chris Lattnercb283342006-06-18 06:48:37 +00002273 CheckEndOfDirective("#undef");
Chris Lattner22eb9722006-06-18 05:43:12 +00002274
2275 // Okay, we finally have a valid identifier to undef.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002276 MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo());
Chris Lattner22eb9722006-06-18 05:43:12 +00002277
Chris Lattner063400e2006-10-14 19:54:15 +00002278 // #undef untaints an identifier if it were marked by define_other_target.
2279 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2280
Chris Lattner22eb9722006-06-18 05:43:12 +00002281 // If the macro is not defined, this is a noop undef, just return.
Chris Lattnercb283342006-06-18 06:48:37 +00002282 if (MI == 0) return;
Chris Lattner677757a2006-06-28 05:26:32 +00002283
Chris Lattner13044d92006-07-03 05:16:44 +00002284 if (!MI->isUsed())
2285 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);
Chris Lattner22eb9722006-06-18 05:43:12 +00002286
2287 // Free macro definition.
2288 delete MI;
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002289 setMacroInfo(MacroNameTok.getIdentifierInfo(), 0);
Chris Lattner22eb9722006-06-18 05:43:12 +00002290}
2291
2292
Chris Lattnerb8761832006-06-24 21:31:03 +00002293//===----------------------------------------------------------------------===//
2294// Preprocessor Conditional Directive Handling.
2295//===----------------------------------------------------------------------===//
2296
Chris Lattner22eb9722006-06-18 05:43:12 +00002297/// HandleIfdefDirective - Implements the #ifdef/#ifndef directive. isIfndef is
Chris Lattner371ac8a2006-07-04 07:11:10 +00002298/// true when this is a #ifndef directive. ReadAnyTokensBeforeDirective is true
2299/// if any tokens have been returned or pp-directives activated before this
2300/// #ifndef has been lexed.
Chris Lattner22eb9722006-06-18 05:43:12 +00002301///
Chris Lattner146762e2007-07-20 16:59:19 +00002302void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef,
Chris Lattner371ac8a2006-07-04 07:11:10 +00002303 bool ReadAnyTokensBeforeDirective) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002304 ++NumIf;
Chris Lattner146762e2007-07-20 16:59:19 +00002305 Token DirectiveTok = Result;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002306
Chris Lattner146762e2007-07-20 16:59:19 +00002307 Token MacroNameTok;
Chris Lattnercb283342006-06-18 06:48:37 +00002308 ReadMacroName(MacroNameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002309
2310 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002311 if (MacroNameTok.is(tok::eom)) {
Chris Lattnerd05e44e2007-09-24 05:14:57 +00002312 // Skip code until we get to #endif. This helps with recovery by not
2313 // emitting an error when the #endif is reached.
2314 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
2315 /*Foundnonskip*/false, /*FoundElse*/false);
Chris Lattnercb283342006-06-18 06:48:37 +00002316 return;
Chris Lattnerd05e44e2007-09-24 05:14:57 +00002317 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002318
2319 // Check to see if this is the last token on the #if[n]def line.
Chris Lattner371ac8a2006-07-04 07:11:10 +00002320 CheckEndOfDirective(isIfndef ? "#ifndef" : "#ifdef");
2321
2322 // If the start of a top-level #ifdef, inform MIOpt.
2323 if (!ReadAnyTokensBeforeDirective &&
2324 CurLexer->getConditionalStackDepth() == 0) {
2325 assert(isIfndef && "#ifdef shouldn't reach here");
2326 CurLexer->MIOpt.EnterTopLevelIFNDEF(MacroNameTok.getIdentifierInfo());
2327 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002328
Chris Lattner063400e2006-10-14 19:54:15 +00002329 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo();
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002330 MacroInfo *MI = getMacroInfo(MII);
Chris Lattnera78a97e2006-07-03 05:42:18 +00002331
Chris Lattner81278c62006-10-14 19:03:49 +00002332 // If there is a macro, process it.
2333 if (MI) {
2334 // Mark it used.
2335 MI->setIsUsed(true);
2336
2337 // If this is the first use of a target-specific macro, warn about it.
2338 if (MI->isTargetSpecific()) {
2339 MI->setIsTargetSpecific(false); // Don't warn on second use.
2340 getTargetInfo().DiagnoseNonPortability(MacroNameTok.getLocation(),
2341 diag::port_target_macro_use);
2342 }
Chris Lattner063400e2006-10-14 19:54:15 +00002343 } else {
2344 // Use of a target-specific macro for some other target? If so, warn.
2345 if (MII->isOtherTargetMacro()) {
2346 MII->setIsOtherTargetMacro(false); // Don't warn on second use.
2347 getTargetInfo().DiagnoseNonPortability(MacroNameTok.getLocation(),
2348 diag::port_target_macro_use);
2349 }
Chris Lattner81278c62006-10-14 19:03:49 +00002350 }
Chris Lattnera78a97e2006-07-03 05:42:18 +00002351
Chris Lattner22eb9722006-06-18 05:43:12 +00002352 // Should we include the stuff contained by this directive?
Chris Lattnera78a97e2006-07-03 05:42:18 +00002353 if (!MI == isIfndef) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002354 // Yes, remember that we are inside a conditional, then lex the next token.
Chris Lattner50b497e2006-06-18 16:32:35 +00002355 CurLexer->pushConditionalLevel(DirectiveTok.getLocation(), /*wasskip*/false,
Chris Lattner22eb9722006-06-18 05:43:12 +00002356 /*foundnonskip*/true, /*foundelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002357 } else {
2358 // No, skip the contents of this block and return the first token after it.
Chris Lattner50b497e2006-06-18 16:32:35 +00002359 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
Chris Lattnercb283342006-06-18 06:48:37 +00002360 /*Foundnonskip*/false,
2361 /*FoundElse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002362 }
2363}
2364
2365/// HandleIfDirective - Implements the #if directive.
2366///
Chris Lattner146762e2007-07-20 16:59:19 +00002367void Preprocessor::HandleIfDirective(Token &IfToken,
Chris Lattnera8654ca2006-07-04 17:42:08 +00002368 bool ReadAnyTokensBeforeDirective) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002369 ++NumIf;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002370
Chris Lattner371ac8a2006-07-04 07:11:10 +00002371 // Parse and evaluation the conditional expression.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00002372 IdentifierInfo *IfNDefMacro = 0;
Chris Lattnera8654ca2006-07-04 17:42:08 +00002373 bool ConditionalTrue = EvaluateDirectiveExpression(IfNDefMacro);
Chris Lattner22eb9722006-06-18 05:43:12 +00002374
2375 // Should we include the stuff contained by this directive?
2376 if (ConditionalTrue) {
Chris Lattnera8654ca2006-07-04 17:42:08 +00002377 // If this condition is equivalent to #ifndef X, and if this is the first
2378 // directive seen, handle it for the multiple-include optimization.
2379 if (!ReadAnyTokensBeforeDirective &&
2380 CurLexer->getConditionalStackDepth() == 0 && IfNDefMacro)
2381 CurLexer->MIOpt.EnterTopLevelIFNDEF(IfNDefMacro);
2382
Chris Lattner22eb9722006-06-18 05:43:12 +00002383 // Yes, remember that we are inside a conditional, then lex the next token.
Chris Lattner50b497e2006-06-18 16:32:35 +00002384 CurLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false,
Chris Lattner22eb9722006-06-18 05:43:12 +00002385 /*foundnonskip*/true, /*foundelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002386 } else {
2387 // No, skip the contents of this block and return the first token after it.
Chris Lattner50b497e2006-06-18 16:32:35 +00002388 SkipExcludedConditionalBlock(IfToken.getLocation(), /*Foundnonskip*/false,
Chris Lattnercb283342006-06-18 06:48:37 +00002389 /*FoundElse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002390 }
2391}
2392
2393/// HandleEndifDirective - Implements the #endif directive.
2394///
Chris Lattner146762e2007-07-20 16:59:19 +00002395void Preprocessor::HandleEndifDirective(Token &EndifToken) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002396 ++NumEndif;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002397
Chris Lattner22eb9722006-06-18 05:43:12 +00002398 // Check that this is the whole directive.
Chris Lattnercb283342006-06-18 06:48:37 +00002399 CheckEndOfDirective("#endif");
Chris Lattner22eb9722006-06-18 05:43:12 +00002400
2401 PPConditionalInfo CondInfo;
2402 if (CurLexer->popConditionalLevel(CondInfo)) {
2403 // No conditionals on the stack: this is an #endif without an #if.
2404 return Diag(EndifToken, diag::err_pp_endif_without_if);
2405 }
2406
Chris Lattner371ac8a2006-07-04 07:11:10 +00002407 // If this the end of a top-level #endif, inform MIOpt.
2408 if (CurLexer->getConditionalStackDepth() == 0)
2409 CurLexer->MIOpt.ExitTopLevelConditional();
2410
Chris Lattner538d7f32006-07-20 04:31:52 +00002411 assert(!CondInfo.WasSkipping && !CurLexer->LexingRawMode &&
Chris Lattner22eb9722006-06-18 05:43:12 +00002412 "This code should only be reachable in the non-skipping case!");
Chris Lattner22eb9722006-06-18 05:43:12 +00002413}
2414
2415
Chris Lattner146762e2007-07-20 16:59:19 +00002416void Preprocessor::HandleElseDirective(Token &Result) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002417 ++NumElse;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002418
Chris Lattner22eb9722006-06-18 05:43:12 +00002419 // #else directive in a non-skipping conditional... start skipping.
Chris Lattnercb283342006-06-18 06:48:37 +00002420 CheckEndOfDirective("#else");
Chris Lattner22eb9722006-06-18 05:43:12 +00002421
2422 PPConditionalInfo CI;
2423 if (CurLexer->popConditionalLevel(CI))
2424 return Diag(Result, diag::pp_err_else_without_if);
Chris Lattner371ac8a2006-07-04 07:11:10 +00002425
2426 // If this is a top-level #else, inform the MIOpt.
2427 if (CurLexer->getConditionalStackDepth() == 0)
2428 CurLexer->MIOpt.FoundTopLevelElse();
Chris Lattner22eb9722006-06-18 05:43:12 +00002429
2430 // If this is a #else with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00002431 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00002432
2433 // Finally, skip the rest of the contents of this block and return the first
2434 // token after it.
2435 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2436 /*FoundElse*/true);
2437}
2438
Chris Lattner146762e2007-07-20 16:59:19 +00002439void Preprocessor::HandleElifDirective(Token &ElifToken) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002440 ++NumElse;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002441
Chris Lattner22eb9722006-06-18 05:43:12 +00002442 // #elif directive in a non-skipping conditional... start skipping.
2443 // We don't care what the condition is, because we will always skip it (since
2444 // the block immediately before it was included).
Chris Lattnercb283342006-06-18 06:48:37 +00002445 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00002446
2447 PPConditionalInfo CI;
2448 if (CurLexer->popConditionalLevel(CI))
2449 return Diag(ElifToken, diag::pp_err_elif_without_if);
2450
Chris Lattner371ac8a2006-07-04 07:11:10 +00002451 // If this is a top-level #elif, inform the MIOpt.
2452 if (CurLexer->getConditionalStackDepth() == 0)
2453 CurLexer->MIOpt.FoundTopLevelElse();
2454
Chris Lattner22eb9722006-06-18 05:43:12 +00002455 // If this is a #elif with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00002456 if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00002457
2458 // Finally, skip the rest of the contents of this block and return the first
2459 // token after it.
2460 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2461 /*FoundElse*/CI.FoundElse);
2462}
Chris Lattnerb8761832006-06-24 21:31:03 +00002463