diff options
author | David Blaikie <dblaikie@gmail.com> | 2011-09-22 02:03:12 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2011-09-22 02:03:12 +0000 |
commit | 319b738e1721083fd459a9ae4c89d9e29704a4a1 (patch) | |
tree | 2701cf09150170cd57082f6890bbdb461bf15a78 | |
parent | 441417a954410d87894c792fb895fe082cb0519b (diff) | |
download | bcm5719-llvm-319b738e1721083fd459a9ae4c89d9e29704a4a1.tar.gz bcm5719-llvm-319b738e1721083fd459a9ae4c89d9e29704a4a1.zip |
ArrayRef-ifying MacroArgs::create's arguments argument.
llvm-svn: 140288
-rw-r--r-- | clang/lib/Lex/MacroArgs.cpp | 25 | ||||
-rw-r--r-- | clang/lib/Lex/MacroArgs.h | 7 | ||||
-rw-r--r-- | clang/lib/Lex/PPMacroExpansion.cpp | 3 |
3 files changed, 19 insertions, 16 deletions
diff --git a/clang/lib/Lex/MacroArgs.cpp b/clang/lib/Lex/MacroArgs.cpp index 42aafd81888..a2d9651470f 100644 --- a/clang/lib/Lex/MacroArgs.cpp +++ b/clang/lib/Lex/MacroArgs.cpp @@ -15,13 +15,15 @@ #include "clang/Lex/MacroInfo.h" #include "clang/Lex/Preprocessor.h" #include "clang/Lex/LexDiagnostic.h" + +#include <algorithm> + using namespace clang; /// MacroArgs ctor function - This destroys the vector passed in. MacroArgs *MacroArgs::create(const MacroInfo *MI, - const Token *UnexpArgTokens, - unsigned NumToks, bool VarargsElided, - Preprocessor &PP) { + llvm::ArrayRef<Token> UnexpArgTokens, + bool VarargsElided, Preprocessor &PP) { assert(MI->isFunctionLike() && "Can't have args for an object-like macro!"); MacroArgs **ResultEnt = 0; @@ -31,12 +33,12 @@ MacroArgs *MacroArgs::create(const MacroInfo *MI, // free list. If so, reuse it. for (MacroArgs **Entry = &PP.MacroArgCache; *Entry; Entry = &(*Entry)->ArgCache) - if ((*Entry)->NumUnexpArgTokens >= NumToks && + if ((*Entry)->NumUnexpArgTokens >= UnexpArgTokens.size() && (*Entry)->NumUnexpArgTokens < ClosestMatch) { ResultEnt = Entry; // If we have an exact match, use it. - if ((*Entry)->NumUnexpArgTokens == NumToks) + if ((*Entry)->NumUnexpArgTokens == UnexpArgTokens.size()) break; // Otherwise, use the best fit. ClosestMatch = (*Entry)->NumUnexpArgTokens; @@ -45,21 +47,22 @@ MacroArgs *MacroArgs::create(const MacroInfo *MI, MacroArgs *Result; if (ResultEnt == 0) { // Allocate memory for a MacroArgs object with the lexer tokens at the end. - Result = (MacroArgs*)malloc(sizeof(MacroArgs) + NumToks*sizeof(Token)); + Result = (MacroArgs*)malloc(sizeof(MacroArgs) + + UnexpArgTokens.size() * sizeof(Token)); // Construct the MacroArgs object. - new (Result) MacroArgs(NumToks, VarargsElided); + new (Result) MacroArgs(UnexpArgTokens.size(), VarargsElided); } else { Result = *ResultEnt; // Unlink this node from the preprocessors singly linked list. *ResultEnt = Result->ArgCache; - Result->NumUnexpArgTokens = NumToks; + Result->NumUnexpArgTokens = UnexpArgTokens.size(); Result->VarargsElided = VarargsElided; } // Copy the actual unexpanded tokens to immediately after the result ptr. - if (NumToks) - memcpy(const_cast<Token*>(Result->getUnexpArgument(0)), - UnexpArgTokens, NumToks*sizeof(Token)); + if (!UnexpArgTokens.empty()) + std::copy(UnexpArgTokens.begin(), UnexpArgTokens.end(), + const_cast<Token*>(Result->getUnexpArgument(0))); return Result; } diff --git a/clang/lib/Lex/MacroArgs.h b/clang/lib/Lex/MacroArgs.h index a962dacf7c9..c45778e3d1b 100644 --- a/clang/lib/Lex/MacroArgs.h +++ b/clang/lib/Lex/MacroArgs.h @@ -14,6 +14,8 @@ #ifndef LLVM_CLANG_MACROARGS_H #define LLVM_CLANG_MACROARGS_H +#include "llvm/ADT/ArrayRef.h" + #include <vector> namespace clang { @@ -58,9 +60,8 @@ public: /// MacroArgs ctor function - Create a new MacroArgs object with the specified /// macro and argument info. static MacroArgs *create(const MacroInfo *MI, - const Token *UnexpArgTokens, - unsigned NumArgTokens, bool VarargsElided, - Preprocessor &PP); + llvm::ArrayRef<Token> UnexpArgTokens, + bool VarargsElided, Preprocessor &PP); /// destroy - Destroy and deallocate the memory for this object. /// diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index 06956879011..9a16d584ab0 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -489,8 +489,7 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName, return 0; } - return MacroArgs::create(MI, ArgTokens.data(), ArgTokens.size(), - isVarargsElided, *this); + return MacroArgs::create(MI, ArgTokens, isVarargsElided, *this); } /// \brief Keeps macro expanded tokens for TokenLexers. |