[cfe-commits] r82429 - in /cfe/trunk: include/clang/Index/Indexer.h tools/CIndex/CIndex.cpp tools/index-test/index-test.cpp

Daniel Dunbar daniel at zuster.org
Sun Sep 20 20:03:22 PDT 2009


Author: ddunbar
Date: Sun Sep 20 22:03:22 2009
New Revision: 82429

URL: http://llvm.org/viewvc/llvm-project?rev=82429&view=rev
Log:
Add Diagnostic to Indexer, and have it keep its own FileManager instead of taking an external reference (which was leaked in the case of the CIndex library).

Modified:
    cfe/trunk/include/clang/Index/Indexer.h
    cfe/trunk/tools/CIndex/CIndex.cpp
    cfe/trunk/tools/index-test/index-test.cpp

Modified: cfe/trunk/include/clang/Index/Indexer.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Index/Indexer.h?rev=82429&r1=82428&r2=82429&view=diff

==============================================================================
--- cfe/trunk/include/clang/Index/Indexer.h (original)
+++ cfe/trunk/include/clang/Index/Indexer.h Sun Sep 20 22:03:22 2009
@@ -14,6 +14,7 @@
 #ifndef LLVM_CLANG_INDEX_INDEXER_H
 #define LLVM_CLANG_INDEX_INDEXER_H
 
+#include "clang/Frontend/TextDiagnosticBuffer.h"
 #include "clang/Index/IndexProvider.h"
 #include "clang/Index/Entity.h"
 #include "clang/Index/GlobalSelector.h"
@@ -37,12 +38,16 @@
   typedef std::map<Entity, TUSetTy> MapTy;
   typedef std::map<GlobalSelector, TUSetTy> SelMapTy;
 
-  explicit Indexer(Program &prog, FileManager &FM) :
-    Prog(prog), FileMgr(FM) { }
+  explicit Indexer(Program &prog) :
+    Prog(prog), Diags(&DiagClient) { }
 
   Program &getProgram() const { return Prog; }
 
-  FileManager &getFileManager() const { return FileMgr; }
+  Diagnostic &getDiagnostics() { return Diags; }
+  const Diagnostic &getDiagnostics() const { return Diags; }
+
+  FileManager &getFileManager() { return FileMgr; }
+  const FileManager &getFileManager() const { return FileMgr; }
 
   /// \brief Find all Entities and map them to the given translation unit.
   void IndexAST(TranslationUnit *TU);
@@ -54,7 +59,9 @@
 
 private:
   Program &Prog;
-  FileManager &FileMgr;
+  TextDiagnosticBuffer DiagClient;
+  Diagnostic Diags;
+  FileManager FileMgr;
 
   MapTy Map;
   CtxTUMapTy CtxTUMap;

Modified: cfe/trunk/tools/CIndex/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=82429&r1=82428&r2=82429&view=diff

==============================================================================
--- cfe/trunk/tools/CIndex/CIndex.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndex.cpp Sun Sep 20 22:03:22 2009
@@ -187,7 +187,8 @@
 
 CXIndex clang_createIndex() 
 {
-  return new Indexer(*new Program(), *new FileManager());
+  // FIXME: Program is leaked.
+  return new Indexer(*new Program());
 }
 
 void clang_disposeIndex(CXIndex CIdx)

Modified: cfe/trunk/tools/index-test/index-test.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/index-test/index-test.cpp?rev=82429&r1=82428&r2=82429&view=diff

==============================================================================
--- cfe/trunk/tools/index-test/index-test.cpp (original)
+++ cfe/trunk/tools/index-test/index-test.cpp Sun Sep 20 22:03:22 2009
@@ -211,10 +211,8 @@
   llvm::cl::ParseCommandLineOptions(argc, argv,
                      "LLVM 'Clang' Indexing Test Bed: http://clang.llvm.org\n");
 
-  FileManager FileMgr;
-
   Program Prog;
-  Indexer Idxer(Prog, FileMgr);
+  Indexer Idxer(Prog);
   llvm::SmallVector<TUnit*, 4> TUnits;
 
   // If no input was specified, read from stdin.
@@ -227,7 +225,8 @@
     std::string ErrMsg;
     llvm::OwningPtr<ASTUnit> AST;
 
-    AST.reset(ASTUnit::LoadFromPCHFile(InFile, FileMgr, &ErrMsg));
+    AST.reset(ASTUnit::LoadFromPCHFile(InFile, Idxer.getFileManager(),
+                                       &ErrMsg));
     if (!AST) {
       llvm::errs() << "[" << InFile << "] Error: " << ErrMsg << '\n';
       return 1;
@@ -245,7 +244,7 @@
 
   if (!PointAtLocation.empty()) {
     const std::string &Filename = PointAtLocation[0].FileName;
-    const FileEntry *File = FileMgr.getFile(Filename);
+    const FileEntry *File = Idxer.getFileManager().getFile(Filename);
     if (File == 0) {
       llvm::errs() << "File '" << Filename << "' does not exist\n";
       return 1;
@@ -254,7 +253,7 @@
     // Safety check. Using an out-of-date AST file will only lead to crashes
     // or incorrect results.
     // FIXME: Check all the source files that make up the AST file.
-    const FileEntry *ASTFile = FileMgr.getFile(FirstFile);
+    const FileEntry *ASTFile = Idxer.getFileManager().getFile(FirstFile);
     if (File->getModificationTime() > ASTFile->getModificationTime()) {
       llvm::errs() << "[" << FirstFile << "] Error: " <<
         "Pointing at a source file which was modified after creating "





More information about the cfe-commits mailing list