ASTUnit.h revision 4b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77
14b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//===--- ASTUnit.h - ASTUnit utility ----------------------------*- C++ -*-===//
24b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
34b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//                     The LLVM Compiler Infrastructure
44b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
54b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source
64b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis// License. See LICENSE.TXT for details.
74b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
84b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
94b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
104b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis// ASTUnit utility class.
114b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
124b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
134b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis
140853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#ifndef LLVM_CLANG_FRONTEND_ASTUNIT_H
150853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#define LLVM_CLANG_FRONTEND_ASTUNIT_H
160853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
170853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#include "llvm/ADT/OwningPtr.h"
180853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#include <string>
190853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
200853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidisnamespace clang {
210853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class FileManager;
220853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class FileEntry;
230853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class SourceManager;
240853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class DiagnosticClient;
250853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class Diagnostic;
260853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class HeaderSearch;
270853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class TargetInfo;
280853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class Preprocessor;
290853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class ASTContext;
300853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  class Decl;
310853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
320853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis/// \brief Utility class for loading a ASTContext from a PCH file.
330853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis///
340853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidisclass ASTUnit {
350853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  llvm::OwningPtr<SourceManager>    SourceMgr;
360853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  llvm::OwningPtr<DiagnosticClient> DiagClient;
370853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  llvm::OwningPtr<Diagnostic>       Diags;
380853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  llvm::OwningPtr<HeaderSearch>     HeaderInfo;
390853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  llvm::OwningPtr<TargetInfo>       Target;
400853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  llvm::OwningPtr<Preprocessor>     PP;
410853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  llvm::OwningPtr<ASTContext>       Ctx;
420853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
430853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ASTUnit(const ASTUnit&); // do not implement
440853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ASTUnit &operator=(const ASTUnit &); // do not implement
450853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ASTUnit();
460853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
470853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidispublic:
480853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ~ASTUnit();
490853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
500853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  const SourceManager &getSourceManager() const { return *SourceMgr.get(); }
510853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis        SourceManager &getSourceManager()       { return *SourceMgr.get(); }
520853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
530853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  const Preprocessor &getPreprocessor() const { return *PP.get(); }
540853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis        Preprocessor &getPreprocessor()       { return *PP.get(); }
550853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
560853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  const ASTContext &getASTContext() const { return *Ctx.get(); }
570853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis        ASTContext &getASTContext()       { return *Ctx.get(); }
580853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
590853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  /// \brief Create a ASTUnit from a PCH file.
600853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ///
610853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  /// \param Filename PCH filename
620853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ///
630853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  /// \param FileMgr The FileManager to use
640853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ///
650853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  /// \param ErrMsg Error message to report if the PCH file could not be loaded
660853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  ///
670853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  /// \returns the initialized ASTUnit or NULL if the PCH failed to load
680853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  static ASTUnit *LoadFromPCHFile(const std::string &Filename,
690853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis                                  FileManager &FileMgr,
700853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis                                  std::string *ErrMsg = 0);
710853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis};
720853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
730853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis} // namespace clang
740853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
750853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#endif
76