summaryrefslogtreecommitdiffstats
path: root/clang/Lex/MacroExpander.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-07-26 06:26:52 +0000
committerChris Lattner <sabre@nondot.org>2006-07-26 06:26:52 +0000
commit7a4af3b73ddb9dc9dfc5441a51b64bcad588ea74 (patch)
treed1d3258e30fbc5aabd81e8d9047f9b7f3c74b27d /clang/Lex/MacroExpander.cpp
parentc1410dc1e616841a8483a4849ecdc664df0d7219 (diff)
downloadbcm5719-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.cpp6
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;
}
OpenPOWER on IntegriCloud