ASTUnit.h revision 77accc11f04ed4ff9afd4e27d430144d4714be56
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 59b85bca2676b433ae555db09de4dd2823ff13b856Zhongxing Xu const Diagnostic &getDiagnostic() const { return *Diags.get(); } 60b85bca2676b433ae555db09de4dd2823ff13b856Zhongxing Xu Diagnostic &getDiagnostic() { return *Diags.get(); } 6177accc11f04ed4ff9afd4e27d430144d4714be56Steve Naroff 6277accc11f04ed4ff9afd4e27d430144d4714be56Steve Naroff const std::string &getOriginalSourceFileName(); 63b85bca2676b433ae555db09de4dd2823ff13b856Zhongxing Xu 640853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// \brief Create a ASTUnit from a PCH file. 650853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// 660853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// \param Filename PCH filename 670853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// 680853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// \param FileMgr The FileManager to use 690853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// 700853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// \param ErrMsg Error message to report if the PCH file could not be loaded 710853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// 720853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis /// \returns the initialized ASTUnit or NULL if the PCH failed to load 730853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis static ASTUnit *LoadFromPCHFile(const std::string &Filename, 740853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis FileManager &FileMgr, 750853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis std::string *ErrMsg = 0); 760853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis}; 770853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis 780853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis} // namespace clang 790853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis 800853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#endif 81