summaryrefslogtreecommitdiffstats
path: root/pp-trace
diff options
context:
space:
mode:
authorErich Keane <erich.keane@intel.com>2017-06-15 00:27:23 +0000
committerErich Keane <erich.keane@intel.com>2017-06-15 00:27:23 +0000
commite2e0e3d31bc6f66c4fff294b1aa791846e25afbb (patch)
treedfde288be2d3eb904be91ab939c21f519848a10f /pp-trace
parenteb6a951a6372defffead76c9fee5a64c1d7bde46 (diff)
Update Append Argument to more efficiently traverse tokens
This function was previously making (correct) assumptions without complete knowledge of MacroArgs guarantees for Arguments. After going through Macro Args a bunch, I'd corrected the getNumArguments (and changed its name), however didn't realize this was depending on the behavior. This patch has version that depends on the corrected getNumMacroArguments's behavior, with the rest checked against my knowledge of the MacroArgs' token list. Commiting no-wait since the test is broken. git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@305434 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'pp-trace')
-rw-r--r--pp-trace/PPCallbacksTracker.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/pp-trace/PPCallbacksTracker.cpp b/pp-trace/PPCallbacksTracker.cpp
index d09cb998..ca634d2d 100644
--- a/pp-trace/PPCallbacksTracker.cpp
+++ b/pp-trace/PPCallbacksTracker.cpp
@@ -588,19 +588,16 @@ void PPCallbacksTracker::appendArgument(const char *Name,
std::string Str;
llvm::raw_string_ostream SS(Str);
SS << "[";
- // The argument tokens might include end tokens, so we reflect how
- // how getUnexpArgument provides the arguments.
- for (int I = 0, E = Value->getNumMacroArguments(); I < E; ++I) {
+
+ // Each argument is is a series of contiguous Tokens, terminated by a eof.
+ // Go through each argument printing tokens until we reach eof.
+ for (unsigned I = 0; I < Value->getNumMacroArguments(); ++I) {
const clang::Token *Current = Value->getUnexpArgument(I);
- int TokenCount = Value->getArgLength(Current) + 1; // include EOF
- E -= TokenCount;
if (I)
SS << ", ";
- // We're assuming tokens are contiguous, as otherwise we have no
- // other way to get at them.
- --TokenCount;
- for (int TokenIndex = 0; TokenIndex < TokenCount; ++TokenIndex, ++Current) {
- if (TokenIndex)
+ bool First = true;
+ while (Current->isNot(clang::tok::eof)) {
+ if (!First)
SS << " ";
// We need to be careful here because the arguments might not be legal in
// YAML, so we use the token name for anything but identifiers and
@@ -611,6 +608,8 @@ void PPCallbacksTracker::appendArgument(const char *Name,
} else {
SS << "<" << Current->getName() << ">";
}
+ ++Current;
+ First = false;
}
}
SS << "]";