1 //===--- MacroExpansion.cpp - Top level Macro Expansion -------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the top level handling of macro expasion for the
11 // preprocessor.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "clang/Lex/Preprocessor.h"
16 #include "MacroArgs.h"
17 #include "clang/Lex/MacroInfo.h"
18 #include "clang/Basic/SourceManager.h"
19 #include "clang/Basic/FileManager.h"
20 #include "clang/Lex/LexDiagnostic.h"
21 #include <cstdio>
22 #include <ctime>
23 using namespace clang;
24 
25 /// setMacroInfo - Specify a macro for this identifier.
26 ///
27 void Preprocessor::setMacroInfo(IdentifierInfo *II, MacroInfo *MI) {
28   if (MI) {
29     Macros[II] = MI;
30     II->setHasMacroDefinition(true);
31   } else if (II->hasMacroDefinition()) {
32     Macros.erase(II);
33     II->setHasMacroDefinition(false);
34   }
35 }
36 
37 /// RegisterBuiltinMacro - Register the specified identifier in the identifier
38 /// table and mark it as a builtin macro to be expanded.
39 IdentifierInfo *Preprocessor::RegisterBuiltinMacro(const char *Name) {
40   // Get the identifier.
41   IdentifierInfo *Id = getIdentifierInfo(Name);
42 
43   // Mark it as being a macro that is builtin.
44   MacroInfo *MI = AllocateMacroInfo(SourceLocation());
45   MI->setIsBuiltinMacro();
46   setMacroInfo(Id, MI);
47   return Id;
48 }
49 
50 
51 /// RegisterBuiltinMacros - Register builtin macros, such as __LINE__ with the
52 /// identifier table.
53 void Preprocessor::RegisterBuiltinMacros() {
54   Ident__LINE__ = RegisterBuiltinMacro("__LINE__");
55   Ident__FILE__ = RegisterBuiltinMacro("__FILE__");
56   Ident__DATE__ = RegisterBuiltinMacro("__DATE__");
57   Ident__TIME__ = RegisterBuiltinMacro("__TIME__");
58   Ident__COUNTER__ = RegisterBuiltinMacro("__COUNTER__");
59   Ident_Pragma  = RegisterBuiltinMacro("_Pragma");
60 
61   // GCC Extensions.
62   Ident__BASE_FILE__     = RegisterBuiltinMacro("__BASE_FILE__");
63   Ident__INCLUDE_LEVEL__ = RegisterBuiltinMacro("__INCLUDE_LEVEL__");
64   Ident__TIMESTAMP__     = RegisterBuiltinMacro("__TIMESTAMP__");
65 }
66 
67 /// isTrivialSingleTokenExpansion - Return true if MI, which has a single token
68 /// in its expansion, currently expands to that token literally.
69 static bool isTrivialSingleTokenExpansion(const MacroInfo *MI,
70                                           const IdentifierInfo *MacroIdent,
71                                           Preprocessor &PP) {
72   IdentifierInfo *II = MI->getReplacementToken(0).getIdentifierInfo();
73 
74   // If the token isn't an identifier, it's always literally expanded.
75   if (II == 0) return true;
76 
77   // If the identifier is a macro, and if that macro is enabled, it may be
78   // expanded so it's not a trivial expansion.
79   if (II->hasMacroDefinition() && PP.getMacroInfo(II)->isEnabled() &&
80       // Fast expanding "#define X X" is ok, because X would be disabled.
81       II != MacroIdent)
82     return false;
83 
84   // If this is an object-like macro invocation, it is safe to trivially expand
85   // it.
86   if (MI->isObjectLike()) return true;
87 
88   // If this is a function-like macro invocation, it's safe to trivially expand
89   // as long as the identifier is not a macro argument.
90   for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end();
91        I != E; ++I)
92     if (*I == II)
93       return false;   // Identifier is a macro argument.
94 
95   return true;
96 }
97 
98 
99 /// isNextPPTokenLParen - Determine whether the next preprocessor token to be
100 /// lexed is a '('.  If so, consume the token and return true, if not, this
101 /// method should have no observable side-effect on the lexed tokens.
102 bool Preprocessor::isNextPPTokenLParen() {
103   // Do some quick tests for rejection cases.
104   unsigned Val;
105   if (CurLexer)
106     Val = CurLexer->isNextPPTokenLParen();
107   else if (CurPTHLexer)
108     Val = CurPTHLexer->isNextPPTokenLParen();
109   else
110     Val = CurTokenLexer->isNextTokenLParen();
111 
112   if (Val == 2) {
113     // We have run off the end.  If it's a source file we don't
114     // examine enclosing ones (C99 5.1.1.2p4).  Otherwise walk up the
115     // macro stack.
116     if (CurPPLexer)
117       return false;
118     for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
119       IncludeStackInfo &Entry = IncludeMacroStack[i-1];
120       if (Entry.TheLexer)
121         Val = Entry.TheLexer->isNextPPTokenLParen();
122       else if (Entry.ThePTHLexer)
123         Val = Entry.ThePTHLexer->isNextPPTokenLParen();
124       else
125         Val = Entry.TheTokenLexer->isNextTokenLParen();
126 
127       if (Val != 2)
128         break;
129 
130       // Ran off the end of a source file?
131       if (Entry.ThePPLexer)
132         return false;
133     }
134   }
135 
136   // Okay, if we know that the token is a '(', lex it and return.  Otherwise we
137   // have found something that isn't a '(' or we found the end of the
138   // translation unit.  In either case, return false.
139   return Val == 1;
140 }
141 
142 /// HandleMacroExpandedIdentifier - If an identifier token is read that is to be
143 /// expanded as a macro, handle it and return the next token as 'Identifier'.
144 bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier,
145                                                  MacroInfo *MI) {
146   if (Callbacks) Callbacks->MacroExpands(Identifier, MI);
147 
148   // If this is a macro exapnsion in the "#if !defined(x)" line for the file,
149   // then the macro could expand to different things in other contexts, we need
150   // to disable the optimization in this case.
151   if (CurPPLexer) CurPPLexer->MIOpt.ExpandedMacro();
152 
153   // If this is a builtin macro, like __LINE__ or _Pragma, handle it specially.
154   if (MI->isBuiltinMacro()) {
155     ExpandBuiltinMacro(Identifier);
156     return false;
157   }
158 
159   /// Args - If this is a function-like macro expansion, this contains,
160   /// for each macro argument, the list of tokens that were provided to the
161   /// invocation.
162   MacroArgs *Args = 0;
163 
164   // Remember where the end of the instantiation occurred.  For an object-like
165   // macro, this is the identifier.  For a function-like macro, this is the ')'.
166   SourceLocation InstantiationEnd = Identifier.getLocation();
167 
168   // If this is a function-like macro, read the arguments.
169   if (MI->isFunctionLike()) {
170     // C99 6.10.3p10: If the preprocessing token immediately after the the macro
171     // name isn't a '(', this macro should not be expanded.
172     if (!isNextPPTokenLParen())
173       return true;
174 
175     // Remember that we are now parsing the arguments to a macro invocation.
176     // Preprocessor directives used inside macro arguments are not portable, and
177     // this enables the warning.
178     InMacroArgs = true;
179     Args = ReadFunctionLikeMacroArgs(Identifier, MI, InstantiationEnd);
180 
181     // Finished parsing args.
182     InMacroArgs = false;
183 
184     // If there was an error parsing the arguments, bail out.
185     if (Args == 0) return false;
186 
187     ++NumFnMacroExpanded;
188   } else {
189     ++NumMacroExpanded;
190   }
191 
192   // Notice that this macro has been used.
193   MI->setIsUsed(true);
194 
195   // If we started lexing a macro, enter the macro expansion body.
196 
197   // If this macro expands to no tokens, don't bother to push it onto the
198   // expansion stack, only to take it right back off.
199   if (MI->getNumTokens() == 0) {
200     // No need for arg info.
201     if (Args) Args->destroy();
202 
203     // Ignore this macro use, just return the next token in the current
204     // buffer.
205     bool HadLeadingSpace = Identifier.hasLeadingSpace();
206     bool IsAtStartOfLine = Identifier.isAtStartOfLine();
207 
208     Lex(Identifier);
209 
210     // If the identifier isn't on some OTHER line, inherit the leading
211     // whitespace/first-on-a-line property of this token.  This handles
212     // stuff like "! XX," -> "! ," and "   XX," -> "    ,", when XX is
213     // empty.
214     if (!Identifier.isAtStartOfLine()) {
215       if (IsAtStartOfLine) Identifier.setFlag(Token::StartOfLine);
216       if (HadLeadingSpace) Identifier.setFlag(Token::LeadingSpace);
217     }
218     ++NumFastMacroExpanded;
219     return false;
220 
221   } else if (MI->getNumTokens() == 1 &&
222              isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(),
223                                            *this)) {
224     // Otherwise, if this macro expands into a single trivially-expanded
225     // token: expand it now.  This handles common cases like
226     // "#define VAL 42".
227 
228     // No need for arg info.
229     if (Args) Args->destroy();
230 
231     // Propagate the isAtStartOfLine/hasLeadingSpace markers of the macro
232     // identifier to the expanded token.
233     bool isAtStartOfLine = Identifier.isAtStartOfLine();
234     bool hasLeadingSpace = Identifier.hasLeadingSpace();
235 
236     // Remember where the token is instantiated.
237     SourceLocation InstantiateLoc = Identifier.getLocation();
238 
239     // Replace the result token.
240     Identifier = MI->getReplacementToken(0);
241 
242     // Restore the StartOfLine/LeadingSpace markers.
243     Identifier.setFlagValue(Token::StartOfLine , isAtStartOfLine);
244     Identifier.setFlagValue(Token::LeadingSpace, hasLeadingSpace);
245 
246     // Update the tokens location to include both its instantiation and physical
247     // locations.
248     SourceLocation Loc =
249       SourceMgr.createInstantiationLoc(Identifier.getLocation(), InstantiateLoc,
250                                        InstantiationEnd,Identifier.getLength());
251     Identifier.setLocation(Loc);
252 
253     // If this is #define X X, we must mark the result as unexpandible.
254     if (IdentifierInfo *NewII = Identifier.getIdentifierInfo())
255       if (getMacroInfo(NewII) == MI)
256         Identifier.setFlag(Token::DisableExpand);
257 
258     // Since this is not an identifier token, it can't be macro expanded, so
259     // we're done.
260     ++NumFastMacroExpanded;
261     return false;
262   }
263 
264   // Start expanding the macro.
265   EnterMacro(Identifier, InstantiationEnd, Args);
266 
267   // Now that the macro is at the top of the include stack, ask the
268   // preprocessor to read the next token from it.
269   Lex(Identifier);
270   return false;
271 }
272 
273 /// ReadFunctionLikeMacroArgs - After reading "MACRO" and knowing that the next
274 /// token is the '(' of the macro, this method is invoked to read all of the
275 /// actual arguments specified for the macro invocation.  This returns null on
276 /// error.
277 MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
278                                                    MacroInfo *MI,
279                                                    SourceLocation &MacroEnd) {
280   // The number of fixed arguments to parse.
281   unsigned NumFixedArgsLeft = MI->getNumArgs();
282   bool isVariadic = MI->isVariadic();
283 
284   // Outer loop, while there are more arguments, keep reading them.
285   Token Tok;
286 
287   // Read arguments as unexpanded tokens.  This avoids issues, e.g., where
288   // an argument value in a macro could expand to ',' or '(' or ')'.
289   LexUnexpandedToken(Tok);
290   assert(Tok.is(tok::l_paren) && "Error computing l-paren-ness?");
291 
292   // ArgTokens - Build up a list of tokens that make up each argument.  Each
293   // argument is separated by an EOF token.  Use a SmallVector so we can avoid
294   // heap allocations in the common case.
295   llvm::SmallVector<Token, 64> ArgTokens;
296 
297   unsigned NumActuals = 0;
298   while (Tok.isNot(tok::r_paren)) {
299     assert((Tok.is(tok::l_paren) || Tok.is(tok::comma)) &&
300            "only expect argument separators here");
301 
302     unsigned ArgTokenStart = ArgTokens.size();
303     SourceLocation ArgStartLoc = Tok.getLocation();
304 
305     // C99 6.10.3p11: Keep track of the number of l_parens we have seen.  Note
306     // that we already consumed the first one.
307     unsigned NumParens = 0;
308 
309     while (1) {
310       // Read arguments as unexpanded tokens.  This avoids issues, e.g., where
311       // an argument value in a macro could expand to ',' or '(' or ')'.
312       LexUnexpandedToken(Tok);
313 
314       if (Tok.is(tok::eof) || Tok.is(tok::eom)) { // "#if f(<eof>" & "#if f(\n"
315         Diag(MacroName, diag::err_unterm_macro_invoc);
316         // Do not lose the EOF/EOM.  Return it to the client.
317         MacroName = Tok;
318         return 0;
319       } else if (Tok.is(tok::r_paren)) {
320         // If we found the ) token, the macro arg list is done.
321         if (NumParens-- == 0) {
322           MacroEnd = Tok.getLocation();
323           break;
324         }
325       } else if (Tok.is(tok::l_paren)) {
326         ++NumParens;
327       } else if (Tok.is(tok::comma) && NumParens == 0) {
328         // Comma ends this argument if there are more fixed arguments expected.
329         // However, if this is a variadic macro, and this is part of the
330         // variadic part, then the comma is just an argument token.
331         if (!isVariadic) break;
332         if (NumFixedArgsLeft > 1)
333           break;
334       } else if (Tok.is(tok::comment) && !KeepMacroComments) {
335         // If this is a comment token in the argument list and we're just in
336         // -C mode (not -CC mode), discard the comment.
337         continue;
338       } else if (Tok.getIdentifierInfo() != 0) {
339         // Reading macro arguments can cause macros that we are currently
340         // expanding from to be popped off the expansion stack.  Doing so causes
341         // them to be reenabled for expansion.  Here we record whether any
342         // identifiers we lex as macro arguments correspond to disabled macros.
343         // If so, we mark the token as noexpand.  This is a subtle aspect of
344         // C99 6.10.3.4p2.
345         if (MacroInfo *MI = getMacroInfo(Tok.getIdentifierInfo()))
346           if (!MI->isEnabled())
347             Tok.setFlag(Token::DisableExpand);
348       }
349       ArgTokens.push_back(Tok);
350     }
351 
352     // If this was an empty argument list foo(), don't add this as an empty
353     // argument.
354     if (ArgTokens.empty() && Tok.getKind() == tok::r_paren)
355       break;
356 
357     // If this is not a variadic macro, and too many args were specified, emit
358     // an error.
359     if (!isVariadic && NumFixedArgsLeft == 0) {
360       if (ArgTokens.size() != ArgTokenStart)
361         ArgStartLoc = ArgTokens[ArgTokenStart].getLocation();
362 
363       // Emit the diagnostic at the macro name in case there is a missing ).
364       // Emitting it at the , could be far away from the macro name.
365       Diag(ArgStartLoc, diag::err_too_many_args_in_macro_invoc);
366       return 0;
367     }
368 
369     // Empty arguments are standard in C99 and supported as an extension in
370     // other modes.
371     if (ArgTokens.size() == ArgTokenStart && !Features.C99)
372       Diag(Tok, diag::ext_empty_fnmacro_arg);
373 
374     // Add a marker EOF token to the end of the token list for this argument.
375     Token EOFTok;
376     EOFTok.startToken();
377     EOFTok.setKind(tok::eof);
378     EOFTok.setLocation(Tok.getLocation());
379     EOFTok.setLength(0);
380     ArgTokens.push_back(EOFTok);
381     ++NumActuals;
382     assert(NumFixedArgsLeft != 0 && "Too many arguments parsed");
383     --NumFixedArgsLeft;
384   }
385 
386   // Okay, we either found the r_paren.  Check to see if we parsed too few
387   // arguments.
388   unsigned MinArgsExpected = MI->getNumArgs();
389 
390   // See MacroArgs instance var for description of this.
391   bool isVarargsElided = false;
392 
393   if (NumActuals < MinArgsExpected) {
394     // There are several cases where too few arguments is ok, handle them now.
395     if (NumActuals == 0 && MinArgsExpected == 1) {
396       // #define A(X)  or  #define A(...)   ---> A()
397 
398       // If there is exactly one argument, and that argument is missing,
399       // then we have an empty "()" argument empty list.  This is fine, even if
400       // the macro expects one argument (the argument is just empty).
401       isVarargsElided = MI->isVariadic();
402     } else if (MI->isVariadic() &&
403                (NumActuals+1 == MinArgsExpected ||  // A(x, ...) -> A(X)
404                 (NumActuals == 0 && MinArgsExpected == 2))) {// A(x,...) -> A()
405       // Varargs where the named vararg parameter is missing: ok as extension.
406       // #define A(x, ...)
407       // A("blah")
408       Diag(Tok, diag::ext_missing_varargs_arg);
409 
410       // Remember this occurred, allowing us to elide the comma when used for
411       // cases like:
412       //   #define A(x, foo...) blah(a, ## foo)
413       //   #define B(x, ...) blah(a, ## __VA_ARGS__)
414       //   #define C(...) blah(a, ## __VA_ARGS__)
415       //  A(x) B(x) C()
416       isVarargsElided = true;
417     } else {
418       // Otherwise, emit the error.
419       Diag(Tok, diag::err_too_few_args_in_macro_invoc);
420       return 0;
421     }
422 
423     // Add a marker EOF token to the end of the token list for this argument.
424     SourceLocation EndLoc = Tok.getLocation();
425     Tok.startToken();
426     Tok.setKind(tok::eof);
427     Tok.setLocation(EndLoc);
428     Tok.setLength(0);
429     ArgTokens.push_back(Tok);
430 
431     // If we expect two arguments, add both as empty.
432     if (NumActuals == 0 && MinArgsExpected == 2)
433       ArgTokens.push_back(Tok);
434 
435   } else if (NumActuals > MinArgsExpected && !MI->isVariadic()) {
436     // Emit the diagnostic at the macro name in case there is a missing ).
437     // Emitting it at the , could be far away from the macro name.
438     Diag(MacroName, diag::err_too_many_args_in_macro_invoc);
439     return 0;
440   }
441 
442   return MacroArgs::create(MI, ArgTokens.data(), ArgTokens.size(),
443                            isVarargsElided);
444 }
445 
446 /// ComputeDATE_TIME - Compute the current time, enter it into the specified
447 /// scratch buffer, then return DATELoc/TIMELoc locations with the position of
448 /// the identifier tokens inserted.
449 static void ComputeDATE_TIME(SourceLocation &DATELoc, SourceLocation &TIMELoc,
450                              Preprocessor &PP) {
451   time_t TT = time(0);
452   struct tm *TM = localtime(&TT);
453 
454   static const char * const Months[] = {
455     "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
456   };
457 
458   char TmpBuffer[100];
459   sprintf(TmpBuffer, "\"%s %2d %4d\"", Months[TM->tm_mon], TM->tm_mday,
460           TM->tm_year+1900);
461 
462   Token TmpTok;
463   TmpTok.startToken();
464   PP.CreateString(TmpBuffer, strlen(TmpBuffer), TmpTok);
465   DATELoc = TmpTok.getLocation();
466 
467   sprintf(TmpBuffer, "\"%02d:%02d:%02d\"", TM->tm_hour, TM->tm_min, TM->tm_sec);
468   PP.CreateString(TmpBuffer, strlen(TmpBuffer), TmpTok);
469   TIMELoc = TmpTok.getLocation();
470 }
471 
472 /// ExpandBuiltinMacro - If an identifier token is read that is to be expanded
473 /// as a builtin macro, handle it and return the next token as 'Tok'.
474 void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
475   // Figure out which token this is.
476   IdentifierInfo *II = Tok.getIdentifierInfo();
477   assert(II && "Can't be a macro without id info!");
478 
479   // If this is an _Pragma directive, expand it, invoke the pragma handler, then
480   // lex the token after it.
481   if (II == Ident_Pragma)
482     return Handle_Pragma(Tok);
483 
484   ++NumBuiltinMacroExpanded;
485 
486   char TmpBuffer[100];
487 
488   // Set up the return result.
489   Tok.setIdentifierInfo(0);
490   Tok.clearFlag(Token::NeedsCleaning);
491 
492   if (II == Ident__LINE__) {
493     // C99 6.10.8: "__LINE__: The presumed line number (within the current
494     // source file) of the current source line (an integer constant)".  This can
495     // be affected by #line.
496     SourceLocation Loc = Tok.getLocation();
497 
498     // Advance to the location of the first _, this might not be the first byte
499     // of the token if it starts with an escaped newline.
500     Loc = AdvanceToTokenCharacter(Loc, 0);
501 
502     // One wrinkle here is that GCC expands __LINE__ to location of the *end* of
503     // a macro instantiation.  This doesn't matter for object-like macros, but
504     // can matter for a function-like macro that expands to contain __LINE__.
505     // Skip down through instantiation points until we find a file loc for the
506     // end of the instantiation history.
507     Loc = SourceMgr.getInstantiationRange(Loc).second;
508     PresumedLoc PLoc = SourceMgr.getPresumedLoc(Loc);
509 
510     // __LINE__ expands to a simple numeric value.
511     sprintf(TmpBuffer, "%u", PLoc.getLine());
512     Tok.setKind(tok::numeric_constant);
513     CreateString(TmpBuffer, strlen(TmpBuffer), Tok, Tok.getLocation());
514   } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__) {
515     // C99 6.10.8: "__FILE__: The presumed name of the current source file (a
516     // character string literal)". This can be affected by #line.
517     PresumedLoc PLoc = SourceMgr.getPresumedLoc(Tok.getLocation());
518 
519     // __BASE_FILE__ is a GNU extension that returns the top of the presumed
520     // #include stack instead of the current file.
521     if (II == Ident__BASE_FILE__) {
522       Diag(Tok, diag::ext_pp_base_file);
523       SourceLocation NextLoc = PLoc.getIncludeLoc();
524       while (NextLoc.isValid()) {
525         PLoc = SourceMgr.getPresumedLoc(NextLoc);
526         NextLoc = PLoc.getIncludeLoc();
527       }
528     }
529 
530     // Escape this filename.  Turn '\' -> '\\' '"' -> '\"'
531     std::string FN = PLoc.getFilename();
532     FN = '"' + Lexer::Stringify(FN) + '"';
533     Tok.setKind(tok::string_literal);
534     CreateString(&FN[0], FN.size(), Tok, Tok.getLocation());
535   } else if (II == Ident__DATE__) {
536     if (!DATELoc.isValid())
537       ComputeDATE_TIME(DATELoc, TIMELoc, *this);
538     Tok.setKind(tok::string_literal);
539     Tok.setLength(strlen("\"Mmm dd yyyy\""));
540     Tok.setLocation(SourceMgr.createInstantiationLoc(DATELoc, Tok.getLocation(),
541                                                      Tok.getLocation(),
542                                                      Tok.getLength()));
543   } else if (II == Ident__TIME__) {
544     if (!TIMELoc.isValid())
545       ComputeDATE_TIME(DATELoc, TIMELoc, *this);
546     Tok.setKind(tok::string_literal);
547     Tok.setLength(strlen("\"hh:mm:ss\""));
548     Tok.setLocation(SourceMgr.createInstantiationLoc(TIMELoc, Tok.getLocation(),
549                                                      Tok.getLocation(),
550                                                      Tok.getLength()));
551   } else if (II == Ident__INCLUDE_LEVEL__) {
552     Diag(Tok, diag::ext_pp_include_level);
553 
554     // Compute the presumed include depth of this token.  This can be affected
555     // by GNU line markers.
556     unsigned Depth = 0;
557 
558     PresumedLoc PLoc = SourceMgr.getPresumedLoc(Tok.getLocation());
559     PLoc = SourceMgr.getPresumedLoc(PLoc.getIncludeLoc());
560     for (; PLoc.isValid(); ++Depth)
561       PLoc = SourceMgr.getPresumedLoc(PLoc.getIncludeLoc());
562 
563     // __INCLUDE_LEVEL__ expands to a simple numeric value.
564     sprintf(TmpBuffer, "%u", Depth);
565     Tok.setKind(tok::numeric_constant);
566     CreateString(TmpBuffer, strlen(TmpBuffer), Tok, Tok.getLocation());
567   } else if (II == Ident__TIMESTAMP__) {
568     // MSVC, ICC, GCC, VisualAge C++ extension.  The generated string should be
569     // of the form "Ddd Mmm dd hh::mm::ss yyyy", which is returned by asctime.
570     Diag(Tok, diag::ext_pp_timestamp);
571 
572     // Get the file that we are lexing out of.  If we're currently lexing from
573     // a macro, dig into the include stack.
574     const FileEntry *CurFile = 0;
575     PreprocessorLexer *TheLexer = getCurrentFileLexer();
576 
577     if (TheLexer)
578       CurFile = SourceMgr.getFileEntryForID(TheLexer->getFileID());
579 
580     // If this file is older than the file it depends on, emit a diagnostic.
581     const char *Result;
582     if (CurFile) {
583       time_t TT = CurFile->getModificationTime();
584       struct tm *TM = localtime(&TT);
585       Result = asctime(TM);
586     } else {
587       Result = "??? ??? ?? ??:??:?? ????\n";
588     }
589     TmpBuffer[0] = '"';
590     strcpy(TmpBuffer+1, Result);
591     unsigned Len = strlen(TmpBuffer);
592     TmpBuffer[Len] = '"';  // Replace the newline with a quote.
593     Tok.setKind(tok::string_literal);
594     CreateString(TmpBuffer, Len+1, Tok, Tok.getLocation());
595   } else if (II == Ident__COUNTER__) {
596     Diag(Tok, diag::ext_pp_counter);
597 
598     // __COUNTER__ expands to a simple numeric value.
599     sprintf(TmpBuffer, "%u", CounterValue++);
600     Tok.setKind(tok::numeric_constant);
601     CreateString(TmpBuffer, strlen(TmpBuffer), Tok, Tok.getLocation());
602   } else {
603     assert(0 && "Unknown identifier!");
604   }
605 }
606