From 6c7807716b807eff65c8a173a4673c44fe62ab48 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 19 Dec 2007 22:24:34 +0000 Subject: [PATCH] Removed "SourceFile" from TranslationUnit. This same information will (soon) be available by querying the SourceManager within the ASTContext referenced by the TranslationUnit. llvm-svn: 45223 --- clang/AST/TranslationUnit.cpp | 12 +----------- clang/Driver/ASTConsumers.cpp | 15 +++++++-------- clang/Driver/ASTConsumers.h | 18 ++++++++++++++---- clang/Driver/SerializationTest.cpp | 12 ++++++------ clang/Driver/clang.cpp | 17 +++++++++-------- clang/include/clang/AST/TranslationUnit.h | 12 +++++------- 6 files changed, 42 insertions(+), 44 deletions(-) diff --git a/clang/AST/TranslationUnit.cpp b/clang/AST/TranslationUnit.cpp index 41d9c79f89a3..8c68e35dcdff 100644 --- a/clang/AST/TranslationUnit.cpp +++ b/clang/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/clang/Driver/ASTConsumers.cpp b/clang/Driver/ASTConsumers.cpp index 202e030419fc..02e30d31b19b 100644 --- a/clang/Driver/ASTConsumers.cpp +++ b/clang/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/clang/Driver/ASTConsumers.h b/clang/Driver/ASTConsumers.h index 44f763e0ec51..d37e5fcbe270 100644 --- a/clang/Driver/ASTConsumers.h +++ b/clang/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/clang/Driver/SerializationTest.cpp b/clang/Driver/SerializationTest.cpp index acb91642d32d..d43b570345bc 100644 --- a/clang/Driver/SerializationTest.cpp +++ b/clang/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/clang/Driver/clang.cpp b/clang/Driver/clang.cpp index 259339c8c583..63f43497ceb5 100644 --- a/clang/Driver/clang.cpp +++ b/clang/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 - 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/clang/include/clang/AST/TranslationUnit.h b/clang/include/clang/AST/TranslationUnit.h index 40034b7b83d3..35b2b443da80 100644 --- a/clang/include/clang/AST/TranslationUnit.h +++ b/clang/include/clang/AST/TranslationUnit.h @@ -31,7 +31,6 @@ class Decl; class FileEntry; class TranslationUnit { - std::string SourceFile; LangOptions LangOpts; ASTContext* Context; std::vector 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;