//===--- TranslationUnit.h - Abstraction for Translation Units -----------===// // // The LLVM Compiler Infrastructure // // This file was developed by Ted Kremenek and is distributed under // the University of Illinois Open Source License. See LICENSE.TXT for details. // // FIXME: This should eventually be moved out of the driver, or replaced // with its eventual successor. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TRANSLATION_UNIT_H #define LLVM_CLANG_TRANSLATION_UNIT_H #include "clang/Basic/LangOptions.h" #include "llvm/Bitcode/SerializationFwd.h" #include "llvm/System/Path.h" #include namespace clang { class FileManager; class SourceManager; class TargetInfo; class IdentifierTable; class SelectorTable; class ASTContext; class Decl; class TranslationUnit { LangOptions LangOpts; ASTContext* Context; std::list TopLevelDecls; explicit TranslationUnit() : Context(NULL) {} public: explicit TranslationUnit(const LangOptions& lopt) : LangOpts(lopt), Context(NULL) {} explicit TranslationUnit(const LangOptions& lopt, ASTContext& context) : LangOpts(lopt), Context(&context) {} void setContext(ASTContext* context) { Context = context; } /// EmitBitcodeFile - Emit the translation unit to a bitcode file. bool EmitBitcodeFile(llvm::sys::Path& Filename) const; /// Emit - Emit the translation unit to an arbitray bitcode stream. void Emit(llvm::Serializer& S) const; /// Create - Reconsititute a translation unit from a bitcode stream. static TranslationUnit* Create(llvm::Deserializer& D, FileManager& FMgr); /// ReadBitcodeFile - Reconsitute a translation unit from a bitcode file. static TranslationUnit* ReadBitcodeFile(llvm::sys::Path& Filename, FileManager& FMgr); // Accessors const LangOptions& getLangOptions() const { return LangOpts; } ASTContext* getASTContext() { return Context; } /// AddTopLevelDecl - Add a top-level declaration to the translation unit. void AddTopLevelDecl(Decl* d) { TopLevelDecls.push_back(d); } typedef std::list::iterator iterator; iterator begin() { return TopLevelDecls.begin(); } iterator end() { return TopLevelDecls.end(); } typedef std::list::const_iterator const_iterator; const_iterator begin() const { return TopLevelDecls.begin(); } const_iterator end() const { return TopLevelDecls.end(); } }; } // end namespace clang #endif