Create a ASTUnitTU class to interface ASTUnit to the Indexer.

llvm-svn: 107467
This commit is contained in:
Zhongxing Xu 2010-07-02 11:52:15 +00:00
parent a94ec74c6f
commit d6c221c3ee
1 changed files with 37 additions and 2 deletions

View File

@ -17,6 +17,10 @@
#include "clang/Frontend/ASTUnit.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Index/CallGraph.h"
#include "clang/Index/Indexer.h"
#include "clang/Index/TranslationUnit.h"
#include "clang/Index/DeclReferenceMap.h"
#include "clang/Index/SelectorMap.h"
#include "llvm/ADT/IntrusiveRefCntPtr.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
@ -33,12 +37,38 @@ static llvm::cl::opt<std::string>
AnalyzeFunction("analyze-function",
llvm::cl::desc("Specify the entry function."));
namespace {
// A thin wrapper over ASTUnit implementing the TranslationUnit interface.
class ASTUnitTU : public TranslationUnit {
ASTUnit *AST;
DeclReferenceMap DeclRefMap;
SelectorMap SelMap;
public:
ASTUnitTU(ASTUnit *ast)
: AST(ast), DeclRefMap(AST->getASTContext()), SelMap(AST->getASTContext()) {
}
virtual ASTContext &getASTContext() {
return AST->getASTContext();
}
virtual DeclReferenceMap &getDeclReferenceMap() {
return DeclRefMap;
}
virtual SelectorMap &getSelectorMap() {
return SelMap;
}
};
}
int main(int argc, char **argv) {
llvm::cl::ParseCommandLineOptions(argc, argv, "clang-wpa");
FileManager FileMgr;
std::vector<ASTUnit*> ASTUnits;
Program Prog;
Indexer Idxer(Prog);
if (InputFilenames.empty())
return 0;
@ -69,6 +99,11 @@ int main(int argc, char **argv) {
if (AnalyzeFunction.empty())
return 0;
llvm::outs() << "Analyze function: " << AnalyzeFunction << '\n';
// Feed all ASTUnits to the Indexer.
for (unsigned i = 0, e = ASTUnits.size(); i != e; ++i) {
ASTUnitTU TU(ASTUnits[i]);
Idxer.IndexAST(&TU);
}
return 0;
}