aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-12-19 22:24:34 +0000
committerTed Kremenek <kremenek@apple.com>2007-12-19 22:24:34 +0000
commitfdfc198013c372c41669957639eac56d27fd57f4 (patch)
tree00ba2e361744a157c56d5a917d78003e8e5f930d
parent80a75916485adee6a3463a87bd327d2fd5077764 (diff)
Removed "SourceFile" from TranslationUnit. This same information will (soon)
be available by querying the SourceManager within the ASTContext referenced by the TranslationUnit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45223 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--AST/TranslationUnit.cpp12
-rw-r--r--Driver/ASTConsumers.cpp15
-rw-r--r--Driver/ASTConsumers.h18
-rw-r--r--Driver/SerializationTest.cpp12
-rw-r--r--Driver/clang.cpp17
-rw-r--r--include/clang/AST/TranslationUnit.h12
6 files changed, 42 insertions, 44 deletions
diff --git a/AST/TranslationUnit.cpp b/AST/TranslationUnit.cpp
index 41d9c79f89..8c68e35dcd 100644
--- a/AST/TranslationUnit.cpp
+++ b/AST/TranslationUnit.cpp
@@ -99,11 +99,7 @@ void TranslationUnit::Emit(llvm::Serializer& Sezr) const {
// Block for SourceManager, LangOptions, and Target. Allows easy skipping
// around to the block for the Selectors during deserialization.
Sezr.EnterBlock();
-
- // Emit the name of the source file.
- Sezr.EmitCStr(SourceFile.c_str());
- Sezr.FlushRecord();
-
+
// Emit the SourceManager.
Sezr.Emit(Context->getSourceManager());
@@ -186,12 +182,6 @@ TranslationUnit* TranslationUnit::Create(llvm::Deserializer& Dezr,
FoundBlock = Dezr.SkipToBlock(BasicMetadataBlock);
assert (FoundBlock);
- { // Read the SourceFile.
- char* SName = Dezr.ReadCStr(NULL,0,true);
- TU->SourceFile = SName;
- delete [] SName;
- }
-
// Read the SourceManager.
SourceManager::CreateAndRegister(Dezr,FMgr);
diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp
index 202e030419..02e30d31b1 100644
--- a/Driver/ASTConsumers.cpp
+++ b/Driver/ASTConsumers.cpp
@@ -614,10 +614,9 @@ namespace {
TranslationUnit TU;
const llvm::sys::Path FName;
public:
- ASTSerializer(const std::string& SourceFile,
- const llvm::sys::Path& F, Diagnostic &diags,
+ ASTSerializer(const llvm::sys::Path& F, Diagnostic &diags,
const LangOptions &LO)
- : Diags(diags), TU(SourceFile,LO), FName(F) {}
+ : Diags(diags), TU(LO), FName(F) {}
virtual void Initialize(ASTContext &Context, unsigned MainFileID) {
TU.setContext(&Context);
@@ -637,7 +636,7 @@ namespace {
} // end anonymous namespace
-ASTConsumer* clang::CreateASTSerializer(const std::string& SourceFile,
+ASTConsumer* clang::CreateASTSerializer(const std::string& InFile,
Diagnostic &Diags,
const LangOptions &Features) {
// FIXME: If the translation unit we are serializing came was itself
@@ -646,15 +645,15 @@ ASTConsumer* clang::CreateASTSerializer(const std::string& SourceFile,
// be completely replaced momentarily.
// FIXME: This is a hack: "/" separator not portable.
- std::string::size_type idx = SourceFile.rfind("/");
+ std::string::size_type idx = InFile.rfind("/");
- if (idx != std::string::npos && idx == SourceFile.size()-1)
+ if (idx != std::string::npos && idx == InFile.size()-1)
return NULL;
std::string TargetPrefix( idx == std::string::npos ?
- SourceFile : SourceFile.substr(idx+1));
+ InFile : InFile.substr(idx+1));
llvm::sys::Path FName = llvm::sys::Path((TargetPrefix + ".ast").c_str());
- return new ASTSerializer(SourceFile, FName, Diags, Features);
+ return new ASTSerializer(FName, Diags, Features);
}
diff --git a/Driver/ASTConsumers.h b/Driver/ASTConsumers.h
index 44f763e0ec..d37e5fcbe2 100644
--- a/Driver/ASTConsumers.h
+++ b/Driver/ASTConsumers.h
@@ -26,20 +26,30 @@ class FileManager;
struct LangOptions;
ASTConsumer *CreateASTPrinter(std::ostream* OS = NULL);
+
ASTConsumer *CreateASTDumper();
+
ASTConsumer *CreateASTViewer();
+
ASTConsumer *CreateCFGDumper(bool ViewGraphs = false);
+
ASTConsumer *CreateLiveVarAnalyzer();
+
ASTConsumer *CreateDeadStoreChecker(Diagnostic &Diags);
+
ASTConsumer *CreateUnitValsChecker(Diagnostic &Diags);
+
ASTConsumer *CreateLLVMEmitter(Diagnostic &Diags, const LangOptions &Features);
+
ASTConsumer *CreateCodeRewriterTest(Diagnostic &Diags);
-ASTConsumer *CreateSerializationTest(const std::string& SourceFile,
- Diagnostic &Diags, FileManager& FMgr,
+
+ASTConsumer *CreateSerializationTest(Diagnostic &Diags,
+ FileManager& FMgr,
const LangOptions &LOpts);
-ASTConsumer *CreateASTSerializer(const std::string& SourceFile,
- Diagnostic &Diags, const LangOptions &LOpts);
+ASTConsumer *CreateASTSerializer(const std::string& InFile,
+ Diagnostic &Diags,
+ const LangOptions &LOpts);
} // end clang namespace
diff --git a/Driver/SerializationTest.cpp b/Driver/SerializationTest.cpp
index acb91642d3..d43b570345 100644
--- a/Driver/SerializationTest.cpp
+++ b/Driver/SerializationTest.cpp
@@ -37,9 +37,8 @@ class SerializationTest : public ASTConsumer {
Diagnostic &Diags;
FileManager &FMgr;
public:
- SerializationTest(const std::string& SourceFile, Diagnostic &d,
- FileManager& fmgr, const LangOptions& LOpts)
- : TU(SourceFile, LOpts), Diags(d), FMgr(fmgr) {}
+ SerializationTest(Diagnostic &d, FileManager& fmgr, const LangOptions& LOpts)
+ : TU(LOpts), Diags(d), FMgr(fmgr) {}
~SerializationTest();
@@ -59,9 +58,10 @@ private:
} // end anonymous namespace
ASTConsumer*
-clang::CreateSerializationTest(const std::string& SourceFile, Diagnostic &Diags,
- FileManager& FMgr, const LangOptions &LOpts) {
- return new SerializationTest(SourceFile,Diags,FMgr,LOpts);
+clang::CreateSerializationTest(Diagnostic &Diags, FileManager& FMgr,
+ const LangOptions &LOpts) {
+
+ return new SerializationTest(Diags,FMgr,LOpts);
}
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 259339c8c5..63f43497ce 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -894,7 +894,7 @@ static void ParseFile(Preprocessor &PP, MinimalAction *PA, unsigned MainFileID){
/// CreateASTConsumer - Create the ASTConsumer for the corresponding program
/// action. These consumers can operate on both ASTs that are freshly
/// parsed from source files as well as those deserialized from Bitcode.
-static ASTConsumer* CreateASTConsumer(const std::string& SourceFile,
+static ASTConsumer* CreateASTConsumer(const std::string& InFile,
Diagnostic& Diag, FileManager& FileMgr,
const LangOptions& LangOpts) {
switch (ProgAction) {
@@ -924,14 +924,14 @@ static ASTConsumer* CreateASTConsumer(const std::string& SourceFile,
return CreateUnitValsChecker(Diag);
case TestSerialization:
- return CreateSerializationTest(SourceFile, Diag, FileMgr, LangOpts);
+ return CreateSerializationTest(Diag, FileMgr, LangOpts);
case EmitLLVM:
return CreateLLVMEmitter(Diag, LangOpts);
case SerializeAST:
// FIXME: Allow user to tailor where the file is written.
- return CreateASTSerializer(SourceFile, Diag, LangOpts);
+ return CreateASTSerializer(InFile, Diag, LangOpts);
case RewriteTest:
return CreateCodeRewriterTest(Diag);
@@ -941,7 +941,7 @@ static ASTConsumer* CreateASTConsumer(const std::string& SourceFile,
/// ProcessInputFile - Process a single input file with the specified state.
///
static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
- const std::string &SourceFile,
+ const std::string &InFile,
TextDiagnostics &OurDiagnosticClient) {
ASTConsumer* Consumer = NULL;
@@ -949,7 +949,8 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
switch (ProgAction) {
default:
- Consumer = CreateASTConsumer(SourceFile, PP.getDiagnostics(),
+ Consumer = CreateASTConsumer(InFile,
+ PP.getDiagnostics(),
PP.getFileManager(),
PP.getLangOptions());
@@ -957,6 +958,7 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
fprintf(stderr, "Unexpected program action!\n");
return;
}
+
break;
case DumpTokens: { // Token dump mode.
@@ -1012,7 +1014,7 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
}
if (Stats) {
- fprintf(stderr, "\nSTATISTICS FOR '%s':\n", SourceFile.c_str());
+ fprintf(stderr, "\nSTATISTICS FOR '%s':\n", InFile.c_str());
PP.PrintStats();
PP.getIdentifierTable().PrintStats();
PP.getHeaderSearchInfo().PrintStats();
@@ -1054,8 +1056,7 @@ static void ProcessSerializedFile(const std::string& InFile, Diagnostic& Diag,
// Observe that we use the source file name stored in the deserialized
// translation unit, rather than InFile.
llvm::scoped_ptr<ASTConsumer>
- Consumer(CreateASTConsumer(TU->getSourceFile(), Diag, FileMgr,
- TU->getLangOpts()));
+ Consumer(CreateASTConsumer(InFile, Diag, FileMgr, TU->getLangOpts()));
if (!Consumer) {
fprintf(stderr, "Unsupported program action with serialized ASTs!\n");
diff --git a/include/clang/AST/TranslationUnit.h b/include/clang/AST/TranslationUnit.h
index 40034b7b83..35b2b443da 100644
--- a/include/clang/AST/TranslationUnit.h
+++ b/include/clang/AST/TranslationUnit.h
@@ -31,7 +31,6 @@ class Decl;
class FileEntry;
class TranslationUnit {
- std::string SourceFile;
LangOptions LangOpts;
ASTContext* Context;
std::vector<Decl*> TopLevelDecls;
@@ -40,15 +39,14 @@ class TranslationUnit {
explicit TranslationUnit() : Context(NULL) {}
public:
- explicit TranslationUnit(const std::string& sourcefile,
- const LangOptions& lopt)
- : SourceFile(sourcefile), LangOpts(lopt), Context(NULL) {}
-
-
+ explicit TranslationUnit(const LangOptions& lopt)
+ : LangOpts(lopt), Context(NULL) {}
+
void setContext(ASTContext* context) { Context = context; }
ASTContext* getContext() const { return Context; }
+
const LangOptions& getLangOpts() const { return LangOpts; }
- const std::string& getSourceFile() const { return SourceFile; }
+ const std::string& getSourceFile() const;
/// Emit - Emit the translation unit to an arbitray bitcode stream.
void Emit(llvm::Serializer& S) const;