diff options
author | Chris Lattner <sabre@nondot.org> | 2006-07-26 06:26:52 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-07-26 06:26:52 +0000 |
commit | 7a4af3b73ddb9dc9dfc5441a51b64bcad588ea74 (patch) | |
tree | d1d3258e30fbc5aabd81e8d9047f9b7f3c74b27d /clang/Lex/MacroExpander.cpp | |
parent | c1410dc1e616841a8483a4849ecdc664df0d7219 (diff) | |
download | bcm5719-llvm-7a4af3b73ddb9dc9dfc5441a51b64bcad588ea74.tar.gz bcm5719-llvm-7a4af3b73ddb9dc9dfc5441a51b64bcad588ea74.zip |
Change Preprocessor::ReadFunctionLikeMacroArgs to use a SmallVector to lex
argument tokens into instead of a real vector. This avoids some malloc
traffic in common cases. In an "abusive macro expansion" testcase, this
reduced -Eonly time by 25%.
llvm-svn: 38757
Diffstat (limited to 'clang/Lex/MacroExpander.cpp')
-rw-r--r-- | clang/Lex/MacroExpander.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/Lex/MacroExpander.cpp b/clang/Lex/MacroExpander.cpp index 24aab614c8a..8fb569afd37 100644 --- a/clang/Lex/MacroExpander.cpp +++ b/clang/Lex/MacroExpander.cpp @@ -26,12 +26,12 @@ using namespace clang; /// MacroArgs ctor function - This destroys the vector passed in. MacroArgs *MacroArgs::create(const MacroInfo *MI, - const std::vector<LexerToken> &UnexpArgTokens) { + const LexerToken *UnexpArgTokens, + unsigned NumToks) { assert(MI->isFunctionLike() && "Can't have args for an object-like macro!"); // Allocate memory for the MacroArgs object with the lexer tokens at the end. - unsigned NumToks = UnexpArgTokens.size(); MacroArgs *Result = (MacroArgs*)malloc(sizeof(MacroArgs) + NumToks*sizeof(LexerToken)); // Construct the macroargs object. @@ -40,7 +40,7 @@ MacroArgs *MacroArgs::create(const MacroInfo *MI, // Copy the actual unexpanded tokens to immediately after the result ptr. if (NumToks) memcpy(const_cast<LexerToken*>(Result->getUnexpArgument(0)), - &UnexpArgTokens[0], NumToks*sizeof(LexerToken)); + UnexpArgTokens, NumToks*sizeof(LexerToken)); return Result; } |