[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