Move post-processing of token annotations to method in AnnotateTokensWorker.

llvm-svn: 103062
This commit is contained in:
Ted Kremenek 2010-05-05 00:55:17 +00:00
parent 63ac5999f1
commit 458c2f190a
1 changed files with 23 additions and 12 deletions

View File

@ -2324,13 +2324,32 @@ typedef llvm::DenseMap<unsigned, CXCursor> AnnotateTokensData;
namespace {
class AnnotateTokensWorker {
AnnotateTokensData &Annotated;
CXToken *Tokens;
CXCursor *Cursors;
unsigned NumTokens;
public:
AnnotateTokensWorker(AnnotateTokensData &annotated)
: Annotated(annotated) {}
AnnotateTokensWorker(AnnotateTokensData &annotated,
CXToken *tokens, CXCursor *cursors, unsigned numTokens)
: Annotated(annotated), Tokens(tokens), Cursors(cursors),
NumTokens(numTokens) {}
void CompleteAnnotations();
enum CXChildVisitResult Visit(CXCursor cursor, CXCursor parent);
};
}
void AnnotateTokensWorker::CompleteAnnotations() {
for (unsigned I = 0; I != NumTokens; ++I) {
// Determine whether we saw a cursor at this token's location.
AnnotateTokensData::iterator Pos = Annotated.find(Tokens[I].int_data[1]);
if (Pos == Annotated.end())
continue;
Cursors[I] = Pos->second;
}
}
enum CXChildVisitResult
AnnotateTokensWorker::Visit(CXCursor cursor, CXCursor parent) {
// We only annotate the locations of declarations, simple
@ -2462,19 +2481,11 @@ void clang_annotateTokens(CXTranslationUnit TU,
// Annotate all of the source locations in the region of interest that map to
// a specific cursor.
CXCursor Parent = clang_getTranslationUnitCursor(CXXUnit);
AnnotateTokensWorker W(Annotated);
AnnotateTokensWorker W(Annotated, Tokens, Cursors, NumTokens);
CursorVisitor AnnotateVis(CXXUnit, AnnotateTokensVisitor, &W,
Decl::MaxPCHLevel, RegionOfInterest);
AnnotateVis.VisitChildren(Parent);
for (unsigned I = 0; I != NumTokens; ++I) {
// Determine whether we saw a cursor at this token's location.
AnnotateTokensData::iterator Pos = Annotated.find(Tokens[I].int_data[1]);
if (Pos == Annotated.end())
continue;
Cursors[I] = Pos->second;
}
W.CompleteAnnotations();
}
} // end: extern "C"