[cfe-commits] r65187 - in /cfe/trunk: include/clang/Lex/MacroInfo.h lib/Lex/PPDirectives.cpp lib/Lex/Preprocessor.cpp

Chris Lattner sabre at nondot.org
Fri Feb 20 14:31:31 PST 2009


Author: lattner
Date: Fri Feb 20 16:31:31 2009
New Revision: 65187

URL: http://llvm.org/viewvc/llvm-project?rev=65187&view=rev
Log:
detemplatify setArgumentList and some other cleanups.

Modified:
    cfe/trunk/include/clang/Lex/MacroInfo.h
    cfe/trunk/lib/Lex/PPDirectives.cpp
    cfe/trunk/lib/Lex/Preprocessor.cpp

Modified: cfe/trunk/include/clang/Lex/MacroInfo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/MacroInfo.h?rev=65187&r1=65186&r2=65187&view=diff

==============================================================================
--- cfe/trunk/include/clang/Lex/MacroInfo.h (original)
+++ cfe/trunk/include/clang/Lex/MacroInfo.h Fri Feb 20 16:31:31 2009
@@ -72,16 +72,26 @@
   /// been used, or if it is not defined in the main file.  This is used to 
   /// emit -Wunused-macros diagnostics.
   bool IsUsed : 1;
-public:
-  MacroInfo(SourceLocation DefLoc);
   
   ~MacroInfo() {
     assert(ArgumentList == 0 && "Didn't call destroy before dtor!");
   }
   
-  void Destroy() {
+public:
+  MacroInfo(SourceLocation DefLoc);
+  
+  /// FreeArgumentList - Free the argument list of the macro, restoring it to a
+  /// state where it can be reused for other devious purposes.
+  void FreeArgumentList() {
     delete[] ArgumentList;
     ArgumentList = 0;
+    NumArguments = 0;
+  }
+  
+  /// Destroy - destroy this MacroInfo object.
+  void Destroy() {
+    FreeArgumentList();
+    this->~MacroInfo();
   }
   
   /// getDefinitionLoc - Return the location that the macro was defined at.
@@ -107,15 +117,15 @@
 
   /// setArgumentList - Set the specified list of identifiers as the argument
   /// list for this macro.
-  template<typename ItTy>
-  void setArgumentList(ItTy ArgBegin, ItTy ArgEnd) {
-    assert(ArgumentList == 0 && "Argument list already set!");
-    unsigned NumArgs = ArgEnd-ArgBegin;
+  void setArgumentList(IdentifierInfo* const *List, unsigned NumArgs) {
+    assert(ArgumentList == 0 && NumArguments == 0 &&
+           "Argument list already set!");
     if (NumArgs == 0) return;
+    
     NumArguments = NumArgs;
     ArgumentList = new IdentifierInfo*[NumArgs];
-    for (unsigned i = 0; ArgBegin != ArgEnd; ++i, ++ArgBegin)
-      ArgumentList[i] = *ArgBegin;
+    for (unsigned i = 0; i != NumArgs; ++i)
+      ArgumentList[i] = List[i];
   }
   
   /// Arguments - The list of arguments for a function-like macro.  This can be

Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=65187&r1=65186&r2=65187&view=diff

==============================================================================
--- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
+++ cfe/trunk/lib/Lex/PPDirectives.cpp Fri Feb 20 16:31:31 2009
@@ -40,7 +40,7 @@
 ///  be reused for allocating new MacroInfo objects.
 void Preprocessor::ReleaseMacroInfo(MacroInfo* MI) {
   MICache.push_back(MI);
-  MI->Destroy();
+  MI->FreeArgumentList();
 }
 
 
@@ -1097,10 +1097,8 @@
     switch (Tok.getKind()) {
     case tok::r_paren:
       // Found the end of the argument list.
-      if (Arguments.empty()) {  // #define FOO()
-        MI->setArgumentList(Arguments.begin(), Arguments.end());
+      if (Arguments.empty())  // #define FOO()
         return false;
-      }
       // Otherwise we have #define FOO(A,)
       Diag(Tok, diag::err_pp_expected_ident_in_arg_list);
       return true;
@@ -1117,7 +1115,7 @@
       // Add the __VA_ARGS__ identifier as an argument.
       Arguments.push_back(Ident__VA_ARGS__);
       MI->setIsC99Varargs();
-      MI->setArgumentList(Arguments.begin(), Arguments.end());
+      MI->setArgumentList(&Arguments[0], Arguments.size());
       return false;
     case tok::eom:  // #define X(
       Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
@@ -1151,7 +1149,7 @@
         Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
         return true;
       case tok::r_paren: // #define X(A)
-        MI->setArgumentList(Arguments.begin(), Arguments.end());
+        MI->setArgumentList(&Arguments[0], Arguments.size());
         return false;
       case tok::comma:  // #define X(A,
         break;
@@ -1167,7 +1165,7 @@
         }
           
         MI->setIsGNUVarargs();
-        MI->setArgumentList(Arguments.begin(), Arguments.end());
+        MI->setArgumentList(&Arguments[0], Arguments.size());
         return false;
       }
     }

Modified: cfe/trunk/lib/Lex/Preprocessor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Preprocessor.cpp?rev=65187&r1=65186&r2=65187&view=diff

==============================================================================
--- cfe/trunk/lib/Lex/Preprocessor.cpp (original)
+++ cfe/trunk/lib/Lex/Preprocessor.cpp Fri Feb 20 16:31:31 2009
@@ -102,7 +102,6 @@
     // destroyed. We still need to run the dstor, however, to free
     // memory alocated by MacroInfo.
     I->second->Destroy();
-    I->second->~MacroInfo();    
     I->first->setHasMacroDefinition(false);
   }
   





More information about the cfe-commits mailing list