summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2010-07-02 11:52:15 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2010-07-02 11:52:15 +0000
commitd6c221c3eee54176446d9aad9134a6948251017d (patch)
treecf7cdc5d19b7a0d56b7c36927147ef7d17b03065
parenta94ec74c6ff6fc19f04d09b0e68479fda7f7fdab (diff)
downloadbcm5719-llvm-d6c221c3eee54176446d9aad9134a6948251017d.tar.gz
bcm5719-llvm-d6c221c3eee54176446d9aad9134a6948251017d.zip
Create a ASTUnitTU class to interface ASTUnit to the Indexer.
llvm-svn: 107467
-rw-r--r--clang/examples/wpa/clang-wpa.cpp39
1 files changed, 37 insertions, 2 deletions
diff --git a/clang/examples/wpa/clang-wpa.cpp b/clang/examples/wpa/clang-wpa.cpp
index aa78a7721d0..4f103b2a8da 100644
--- a/clang/examples/wpa/clang-wpa.cpp
+++ b/clang/examples/wpa/clang-wpa.cpp
@@ -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;
}
OpenPOWER on IntegriCloud