[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