Moved LangOptions from TranslationUnit to ASTContext.  This induced a variety of cleanups in some ASTConsumers.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51943 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp
index 9ab6157..5d45f31 100644
--- a/Driver/ASTConsumers.cpp
+++ b/Driver/ASTConsumers.cpp
@@ -868,12 +868,10 @@
 class ASTSerializer : public ASTConsumer {
 protected:
   Diagnostic &Diags;
-  const LangOptions& lang;
   TranslationUnit* TU;
 
 public:
-  ASTSerializer(Diagnostic& diags, const LangOptions& LO)
-    : Diags(diags), lang(LO), TU(0) {}
+  ASTSerializer(Diagnostic& diags) : Diags(diags), TU(0) {}
     
   virtual ~ASTSerializer() { delete TU; }
   
@@ -892,9 +890,8 @@
 class SingleFileSerializer : public ASTSerializer {
   const llvm::sys::Path FName;
 public:
-  SingleFileSerializer(const llvm::sys::Path& F, Diagnostic &diags,
-                          const LangOptions &LO)
-  : ASTSerializer(diags,LO), FName(F) {}    
+  SingleFileSerializer(const llvm::sys::Path& F, Diagnostic &diags)
+  : ASTSerializer(diags), FName(F) {}    
   
   ~SingleFileSerializer() {
     EmitASTBitcodeFile(TU, FName);
@@ -904,9 +901,8 @@
 class BuildSerializer : public ASTSerializer {
   llvm::sys::Path EmitDir;  
 public:
-  BuildSerializer(const llvm::sys::Path& dir, Diagnostic &diags,
-                  const LangOptions &LO)
-  : ASTSerializer(diags,LO), EmitDir(dir) {}
+  BuildSerializer(const llvm::sys::Path& dir, Diagnostic &diags)
+  : ASTSerializer(diags), EmitDir(dir) {}
   
   ~BuildSerializer() {
 
@@ -950,8 +946,7 @@
 
 ASTConsumer* clang::CreateASTSerializer(const std::string& InFile,
                                         const std::string& OutputFile,
-                                        Diagnostic &Diags,
-                                        const LangOptions &Features) {
+                                        Diagnostic &Diags) {
   
   if (OutputFile.size()) {
     if (InFile == "-") {
@@ -982,7 +977,7 @@
     
     // FIXME: We should probably only allow using BuildSerializer when
     // the ASTs come from parsed source files, and not from .ast files.
-    return new BuildSerializer(EmitDir, Diags, Features);
+    return new BuildSerializer(EmitDir, Diags);
   }
 
   // The user did not specify an output directory for serialized ASTs.
@@ -991,5 +986,5 @@
   
   llvm::sys::Path FName(InFile.c_str());
   FName.appendSuffix("ast");
-  return new SingleFileSerializer(FName, Diags, Features);  
+  return new SingleFileSerializer(FName, Diags);  
 }
diff --git a/Driver/ASTConsumers.h b/Driver/ASTConsumers.h
index 7037ade..ca93e0f 100644
--- a/Driver/ASTConsumers.h
+++ b/Driver/ASTConsumers.h
@@ -67,13 +67,11 @@
                                Preprocessor *PP, PreprocessorFactory* PPF);
 
 ASTConsumer *CreateSerializationTest(Diagnostic &Diags,
-                                     FileManager& FMgr, 
-                                     const LangOptions &LOpts);
+                                     FileManager& FMgr);
   
 ASTConsumer *CreateASTSerializer(const std::string& InFile,
                                  const std::string& EmitDir,
-                                 Diagnostic &Diags,
-                                 const LangOptions &LOpts);
+                                 Diagnostic &Diags);
 
 } // end clang namespace
 
diff --git a/Driver/SerializationTest.cpp b/Driver/SerializationTest.cpp
index 5f7b94f..946a4c8 100644
--- a/Driver/SerializationTest.cpp
+++ b/Driver/SerializationTest.cpp
@@ -33,26 +33,16 @@
 namespace {
   
 class SerializationTest : public ASTConsumer {
-  llvm::OwningPtr<TranslationUnit> TU;
+  TranslationUnit* TU;
   Diagnostic &Diags;
   FileManager &FMgr;  
-  const LangOptions& lopts;
 public:  
-  SerializationTest(Diagnostic &d, FileManager& fmgr, const LangOptions& LOpts)
-                    : Diags(d), FMgr(fmgr), lopts(LOpts) {}
+  SerializationTest(Diagnostic &d, FileManager& fmgr)
+                    : TU(0), Diags(d), FMgr(fmgr) {}
   
   ~SerializationTest();
 
-  virtual void Initialize(ASTContext& context) {
-    if (!TU) {
-      TU.reset(new TranslationUnit(context, lopts));
-      TU->SetOwnsDecls(false);
-    }
-  }  
-
-  virtual void HandleTopLevelDecl(Decl *D) {
-    TU->AddTopLevelDecl(D);
-  }
+  virtual void InitializeTU(TranslationUnit& tu) { TU = &tu; }  
   
 private:
   bool Serialize(llvm::sys::Path& Filename, llvm::sys::Path& FNameDeclPrint);
@@ -62,10 +52,8 @@
 } // end anonymous namespace
 
 ASTConsumer*
-clang::CreateSerializationTest(Diagnostic &Diags, FileManager& FMgr,
-                               const LangOptions &LOpts) {
-  
-  return new SerializationTest(Diags,FMgr,LOpts);
+clang::CreateSerializationTest(Diagnostic &Diags, FileManager& FMgr) {  
+  return new SerializationTest(Diags, FMgr);
 }
 
 
@@ -89,7 +77,7 @@
                                     llvm::sys::Path& FNameDeclPrint) {
   
   // Deserialize the translation unit.
-  TranslationUnit* NewTU = ReadASTBitcodeFile(Filename,FMgr);
+  TranslationUnit* NewTU = ReadASTBitcodeFile(Filename, FMgr);
 
   if (!NewTU)
     return false;
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 7a61145..df41e54 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -1189,7 +1189,7 @@
                                 OutputFile, VisualizeEG, TrimGraph, AnalyzeAll);
       
     case TestSerialization:
-      return CreateSerializationTest(Diag, FileMgr, LangOpts);
+      return CreateSerializationTest(Diag, FileMgr);
       
     case EmitLLVM:
     case EmitBC:
@@ -1198,7 +1198,7 @@
 
     case SerializeAST:
       // FIXME: Allow user to tailor where the file is written.
-      return CreateASTSerializer(InFile, OutputFile, Diag, LangOpts);
+      return CreateASTSerializer(InFile, OutputFile, Diag);
       
     case RewriteObjC:
       return CreateCodeRewriterTest(InFile, OutputFile, Diag, LangOpts);
@@ -1362,8 +1362,8 @@
   // translation unit, rather than InFile.
   llvm::Module *DestModule;
   llvm::OwningPtr<ASTConsumer>
-    Consumer(CreateASTConsumer(InFile, Diag, FileMgr, TU->getLangOpts(), 0, 0,
-                               DestModule));
+    Consumer(CreateASTConsumer(InFile, Diag, FileMgr, TU->getLangOptions(),
+                               0, 0, DestModule));
   
   if (!Consumer) {      
     fprintf(stderr, "Unsupported program action with serialized ASTs!\n");