summaryrefslogtreecommitdiffstats
path: root/include/clang/Frontend/CompilerInstance.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang/Frontend/CompilerInstance.h')
-rw-r--r--include/clang/Frontend/CompilerInstance.h785
1 files changed, 0 insertions, 785 deletions
diff --git a/include/clang/Frontend/CompilerInstance.h b/include/clang/Frontend/CompilerInstance.h
deleted file mode 100644
index 83eed2c..0000000
--- a/include/clang/Frontend/CompilerInstance.h
+++ /dev/null
@@ -1,785 +0,0 @@
-//===-- CompilerInstance.h - Clang Compiler Instance ------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_COMPILERINSTANCE_H_
-#define LLVM_CLANG_FRONTEND_COMPILERINSTANCE_H_
-
-#include "clang/AST/ASTConsumer.h"
-#include "clang/Frontend/PCHContainerOperations.h"
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/SourceManager.h"
-#include "clang/Frontend/CompilerInvocation.h"
-#include "clang/Frontend/Utils.h"
-#include "clang/Lex/ModuleLoader.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/StringRef.h"
-#include <cassert>
-#include <list>
-#include <memory>
-#include <string>
-#include <utility>
-
-namespace llvm {
-class raw_fd_ostream;
-class Timer;
-class TimerGroup;
-}
-
-namespace clang {
-class ASTContext;
-class ASTConsumer;
-class ASTReader;
-class CodeCompleteConsumer;
-class DiagnosticsEngine;
-class DiagnosticConsumer;
-class ExternalASTSource;
-class FileEntry;
-class FileManager;
-class FrontendAction;
-class Module;
-class Preprocessor;
-class Sema;
-class SourceManager;
-class TargetInfo;
-
-/// CompilerInstance - Helper class for managing a single instance of the Clang
-/// compiler.
-///
-/// The CompilerInstance serves two purposes:
-/// (1) It manages the various objects which are necessary to run the compiler,
-/// for example the preprocessor, the target information, and the AST
-/// context.
-/// (2) It provides utility routines for constructing and manipulating the
-/// common Clang objects.
-///
-/// The compiler instance generally owns the instance of all the objects that it
-/// manages. However, clients can still share objects by manually setting the
-/// object and retaking ownership prior to destroying the CompilerInstance.
-///
-/// The compiler instance is intended to simplify clients, but not to lock them
-/// in to the compiler instance for everything. When possible, utility functions
-/// come in two forms; a short form that reuses the CompilerInstance objects,
-/// and a long form that takes explicit instances of any required objects.
-class CompilerInstance : public ModuleLoader {
- /// The options used in this compiler instance.
- IntrusiveRefCntPtr<CompilerInvocation> Invocation;
-
- /// The diagnostics engine instance.
- IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics;
-
- /// The target being compiled for.
- IntrusiveRefCntPtr<TargetInfo> Target;
-
- /// Auxiliary Target info.
- IntrusiveRefCntPtr<TargetInfo> AuxTarget;
-
- /// The virtual file system.
- IntrusiveRefCntPtr<vfs::FileSystem> VirtualFileSystem;
-
- /// The file manager.
- IntrusiveRefCntPtr<FileManager> FileMgr;
-
- /// The source manager.
- IntrusiveRefCntPtr<SourceManager> SourceMgr;
-
- /// The preprocessor.
- IntrusiveRefCntPtr<Preprocessor> PP;
-
- /// The AST context.
- IntrusiveRefCntPtr<ASTContext> Context;
-
- /// The AST consumer.
- std::unique_ptr<ASTConsumer> Consumer;
-
- /// The code completion consumer.
- std::unique_ptr<CodeCompleteConsumer> CompletionConsumer;
-
- /// \brief The semantic analysis object.
- std::unique_ptr<Sema> TheSema;
-
- /// \brief The frontend timer group.
- std::unique_ptr<llvm::TimerGroup> FrontendTimerGroup;
-
- /// \brief The frontend timer.
- std::unique_ptr<llvm::Timer> FrontendTimer;
-
- /// \brief The ASTReader, if one exists.
- IntrusiveRefCntPtr<ASTReader> ModuleManager;
-
- /// \brief The module dependency collector for crashdumps
- std::shared_ptr<ModuleDependencyCollector> ModuleDepCollector;
-
- /// \brief The module provider.
- std::shared_ptr<PCHContainerOperations> ThePCHContainerOperations;
-
- /// \brief The dependency file generator.
- std::unique_ptr<DependencyFileGenerator> TheDependencyFileGenerator;
-
- std::vector<std::shared_ptr<DependencyCollector>> DependencyCollectors;
-
- /// \brief The set of top-level modules that has already been loaded,
- /// along with the module map
- llvm::DenseMap<const IdentifierInfo *, Module *> KnownModules;
-
- /// \brief The location of the module-import keyword for the last module
- /// import.
- SourceLocation LastModuleImportLoc;
-
- /// \brief The result of the last module import.
- ///
- ModuleLoadResult LastModuleImportResult;
-
- /// \brief Whether we should (re)build the global module index once we
- /// have finished with this translation unit.
- bool BuildGlobalModuleIndex;
-
- /// \brief We have a full global module index, with all modules.
- bool HaveFullGlobalModuleIndex;
-
- /// \brief One or more modules failed to build.
- bool ModuleBuildFailed;
-
- /// \brief Holds information about the output file.
- ///
- /// If TempFilename is not empty we must rename it to Filename at the end.
- /// TempFilename may be empty and Filename non-empty if creating the temporary
- /// failed.
- struct OutputFile {
- std::string Filename;
- std::string TempFilename;
- std::unique_ptr<raw_ostream> OS;
-
- OutputFile(std::string filename, std::string tempFilename,
- std::unique_ptr<raw_ostream> OS)
- : Filename(std::move(filename)), TempFilename(std::move(tempFilename)),
- OS(std::move(OS)) {}
- OutputFile(OutputFile &&O)
- : Filename(std::move(O.Filename)),
- TempFilename(std::move(O.TempFilename)), OS(std::move(O.OS)) {}
- };
-
- /// If the output doesn't support seeking (terminal, pipe). we switch
- /// the stream to a buffer_ostream. These are the buffer and the original
- /// stream.
- std::unique_ptr<llvm::raw_fd_ostream> NonSeekStream;
-
- /// The list of active output files.
- std::list<OutputFile> OutputFiles;
-
- CompilerInstance(const CompilerInstance &) = delete;
- void operator=(const CompilerInstance &) = delete;
-public:
- explicit CompilerInstance(
- std::shared_ptr<PCHContainerOperations> PCHContainerOps =
- std::make_shared<PCHContainerOperations>(),
- bool BuildingModule = false);
- ~CompilerInstance() override;
-
- /// @name High-Level Operations
- /// {
-
- /// ExecuteAction - Execute the provided action against the compiler's
- /// CompilerInvocation object.
- ///
- /// This function makes the following assumptions:
- ///
- /// - The invocation options should be initialized. This function does not
- /// handle the '-help' or '-version' options, clients should handle those
- /// directly.
- ///
- /// - The diagnostics engine should have already been created by the client.
- ///
- /// - No other CompilerInstance state should have been initialized (this is
- /// an unchecked error).
- ///
- /// - Clients should have initialized any LLVM target features that may be
- /// required.
- ///
- /// - Clients should eventually call llvm_shutdown() upon the completion of
- /// this routine to ensure that any managed objects are properly destroyed.
- ///
- /// Note that this routine may write output to 'stderr'.
- ///
- /// \param Act - The action to execute.
- /// \return - True on success.
- //
- // FIXME: This function should take the stream to write any debugging /
- // verbose output to as an argument.
- //
- // FIXME: Eliminate the llvm_shutdown requirement, that should either be part
- // of the context or else not CompilerInstance specific.
- bool ExecuteAction(FrontendAction &Act);
-
- /// }
- /// @name Compiler Invocation and Options
- /// {
-
- bool hasInvocation() const { return Invocation != nullptr; }
-
- CompilerInvocation &getInvocation() {
- assert(Invocation && "Compiler instance has no invocation!");
- return *Invocation;
- }
-
- /// setInvocation - Replace the current invocation.
- void setInvocation(CompilerInvocation *Value);
-
- /// \brief Indicates whether we should (re)build the global module index.
- bool shouldBuildGlobalModuleIndex() const;
-
- /// \brief Set the flag indicating whether we should (re)build the global
- /// module index.
- void setBuildGlobalModuleIndex(bool Build) {
- BuildGlobalModuleIndex = Build;
- }
-
- /// }
- /// @name Forwarding Methods
- /// {
-
- AnalyzerOptionsRef getAnalyzerOpts() {
- return Invocation->getAnalyzerOpts();
- }
-
- CodeGenOptions &getCodeGenOpts() {
- return Invocation->getCodeGenOpts();
- }
- const CodeGenOptions &getCodeGenOpts() const {
- return Invocation->getCodeGenOpts();
- }
-
- DependencyOutputOptions &getDependencyOutputOpts() {
- return Invocation->getDependencyOutputOpts();
- }
- const DependencyOutputOptions &getDependencyOutputOpts() const {
- return Invocation->getDependencyOutputOpts();
- }
-
- DiagnosticOptions &getDiagnosticOpts() {
- return Invocation->getDiagnosticOpts();
- }
- const DiagnosticOptions &getDiagnosticOpts() const {
- return Invocation->getDiagnosticOpts();
- }
-
- FileSystemOptions &getFileSystemOpts() {
- return Invocation->getFileSystemOpts();
- }
- const FileSystemOptions &getFileSystemOpts() const {
- return Invocation->getFileSystemOpts();
- }
-
- FrontendOptions &getFrontendOpts() {
- return Invocation->getFrontendOpts();
- }
- const FrontendOptions &getFrontendOpts() const {
- return Invocation->getFrontendOpts();
- }
-
- HeaderSearchOptions &getHeaderSearchOpts() {
- return Invocation->getHeaderSearchOpts();
- }
- const HeaderSearchOptions &getHeaderSearchOpts() const {
- return Invocation->getHeaderSearchOpts();
- }
-
- LangOptions &getLangOpts() {
- return *Invocation->getLangOpts();
- }
- const LangOptions &getLangOpts() const {
- return *Invocation->getLangOpts();
- }
-
- PreprocessorOptions &getPreprocessorOpts() {
- return Invocation->getPreprocessorOpts();
- }
- const PreprocessorOptions &getPreprocessorOpts() const {
- return Invocation->getPreprocessorOpts();
- }
-
- PreprocessorOutputOptions &getPreprocessorOutputOpts() {
- return Invocation->getPreprocessorOutputOpts();
- }
- const PreprocessorOutputOptions &getPreprocessorOutputOpts() const {
- return Invocation->getPreprocessorOutputOpts();
- }
-
- TargetOptions &getTargetOpts() {
- return Invocation->getTargetOpts();
- }
- const TargetOptions &getTargetOpts() const {
- return Invocation->getTargetOpts();
- }
-
- /// }
- /// @name Diagnostics Engine
- /// {
-
- bool hasDiagnostics() const { return Diagnostics != nullptr; }
-
- /// Get the current diagnostics engine.
- DiagnosticsEngine &getDiagnostics() const {
- assert(Diagnostics && "Compiler instance has no diagnostics!");
- return *Diagnostics;
- }
-
- /// setDiagnostics - Replace the current diagnostics engine.
- void setDiagnostics(DiagnosticsEngine *Value);
-
- DiagnosticConsumer &getDiagnosticClient() const {
- assert(Diagnostics && Diagnostics->getClient() &&
- "Compiler instance has no diagnostic client!");
- return *Diagnostics->getClient();
- }
-
- /// }
- /// @name Target Info
- /// {
-
- bool hasTarget() const { return Target != nullptr; }
-
- TargetInfo &getTarget() const {
- assert(Target && "Compiler instance has no target!");
- return *Target;
- }
-
- /// Replace the current Target.
- void setTarget(TargetInfo *Value);
-
- /// }
- /// @name AuxTarget Info
- /// {
-
- TargetInfo *getAuxTarget() const { return AuxTarget.get(); }
-
- /// Replace the current AuxTarget.
- void setAuxTarget(TargetInfo *Value);
-
- /// }
- /// @name Virtual File System
- /// {
-
- bool hasVirtualFileSystem() const { return VirtualFileSystem != nullptr; }
-
- vfs::FileSystem &getVirtualFileSystem() const {
- assert(hasVirtualFileSystem() &&
- "Compiler instance has no virtual file system");
- return *VirtualFileSystem;
- }
-
- /// \brief Replace the current virtual file system.
- ///
- /// \note Most clients should use setFileManager, which will implicitly reset
- /// the virtual file system to the one contained in the file manager.
- void setVirtualFileSystem(IntrusiveRefCntPtr<vfs::FileSystem> FS) {
- VirtualFileSystem = FS;
- }
-
- /// }
- /// @name File Manager
- /// {
-
- bool hasFileManager() const { return FileMgr != nullptr; }
-
- /// Return the current file manager to the caller.
- FileManager &getFileManager() const {
- assert(FileMgr && "Compiler instance has no file manager!");
- return *FileMgr;
- }
-
- void resetAndLeakFileManager() {
- BuryPointer(FileMgr.get());
- FileMgr.resetWithoutRelease();
- }
-
- /// \brief Replace the current file manager and virtual file system.
- void setFileManager(FileManager *Value);
-
- /// }
- /// @name Source Manager
- /// {
-
- bool hasSourceManager() const { return SourceMgr != nullptr; }
-
- /// Return the current source manager.
- SourceManager &getSourceManager() const {
- assert(SourceMgr && "Compiler instance has no source manager!");
- return *SourceMgr;
- }
-
- void resetAndLeakSourceManager() {
- BuryPointer(SourceMgr.get());
- SourceMgr.resetWithoutRelease();
- }
-
- /// setSourceManager - Replace the current source manager.
- void setSourceManager(SourceManager *Value);
-
- /// }
- /// @name Preprocessor
- /// {
-
- bool hasPreprocessor() const { return PP != nullptr; }
-
- /// Return the current preprocessor.
- Preprocessor &getPreprocessor() const {
- assert(PP && "Compiler instance has no preprocessor!");
- return *PP;
- }
-
- void resetAndLeakPreprocessor() {
- BuryPointer(PP.get());
- PP.resetWithoutRelease();
- }
-
- /// Replace the current preprocessor.
- void setPreprocessor(Preprocessor *Value);
-
- /// }
- /// @name ASTContext
- /// {
-
- bool hasASTContext() const { return Context != nullptr; }
-
- ASTContext &getASTContext() const {
- assert(Context && "Compiler instance has no AST context!");
- return *Context;
- }
-
- void resetAndLeakASTContext() {
- BuryPointer(Context.get());
- Context.resetWithoutRelease();
- }
-
- /// setASTContext - Replace the current AST context.
- void setASTContext(ASTContext *Value);
-
- /// \brief Replace the current Sema; the compiler instance takes ownership
- /// of S.
- void setSema(Sema *S);
-
- /// }
- /// @name ASTConsumer
- /// {
-
- bool hasASTConsumer() const { return (bool)Consumer; }
-
- ASTConsumer &getASTConsumer() const {
- assert(Consumer && "Compiler instance has no AST consumer!");
- return *Consumer;
- }
-
- /// takeASTConsumer - Remove the current AST consumer and give ownership to
- /// the caller.
- std::unique_ptr<ASTConsumer> takeASTConsumer() { return std::move(Consumer); }
-
- /// setASTConsumer - Replace the current AST consumer; the compiler instance
- /// takes ownership of \p Value.
- void setASTConsumer(std::unique_ptr<ASTConsumer> Value);
-
- /// }
- /// @name Semantic analysis
- /// {
- bool hasSema() const { return (bool)TheSema; }
-
- Sema &getSema() const {
- assert(TheSema && "Compiler instance has no Sema object!");
- return *TheSema;
- }
-
- std::unique_ptr<Sema> takeSema();
- void resetAndLeakSema();
-
- /// }
- /// @name Module Management
- /// {
-
- IntrusiveRefCntPtr<ASTReader> getModuleManager() const;
- void setModuleManager(IntrusiveRefCntPtr<ASTReader> Reader);
-
- std::shared_ptr<ModuleDependencyCollector> getModuleDepCollector() const;
- void setModuleDepCollector(
- std::shared_ptr<ModuleDependencyCollector> Collector);
-
- std::shared_ptr<PCHContainerOperations> getPCHContainerOperations() const {
- return ThePCHContainerOperations;
- }
-
- /// Return the appropriate PCHContainerWriter depending on the
- /// current CodeGenOptions.
- const PCHContainerWriter &getPCHContainerWriter() const {
- assert(Invocation && "cannot determine module format without invocation");
- StringRef Format = getHeaderSearchOpts().ModuleFormat;
- auto *Writer = ThePCHContainerOperations->getWriterOrNull(Format);
- if (!Writer) {
- if (Diagnostics)
- Diagnostics->Report(diag::err_module_format_unhandled) << Format;
- llvm::report_fatal_error("unknown module format");
- }
- return *Writer;
- }
-
- /// Return the appropriate PCHContainerReader depending on the
- /// current CodeGenOptions.
- const PCHContainerReader &getPCHContainerReader() const {
- assert(Invocation && "cannot determine module format without invocation");
- StringRef Format = getHeaderSearchOpts().ModuleFormat;
- auto *Reader = ThePCHContainerOperations->getReaderOrNull(Format);
- if (!Reader) {
- if (Diagnostics)
- Diagnostics->Report(diag::err_module_format_unhandled) << Format;
- llvm::report_fatal_error("unknown module format");
- }
- return *Reader;
- }
-
- /// }
- /// @name Code Completion
- /// {
-
- bool hasCodeCompletionConsumer() const { return (bool)CompletionConsumer; }
-
- CodeCompleteConsumer &getCodeCompletionConsumer() const {
- assert(CompletionConsumer &&
- "Compiler instance has no code completion consumer!");
- return *CompletionConsumer;
- }
-
- /// setCodeCompletionConsumer - Replace the current code completion consumer;
- /// the compiler instance takes ownership of \p Value.
- void setCodeCompletionConsumer(CodeCompleteConsumer *Value);
-
- /// }
- /// @name Frontend timer
- /// {
-
- bool hasFrontendTimer() const { return (bool)FrontendTimer; }
-
- llvm::Timer &getFrontendTimer() const {
- assert(FrontendTimer && "Compiler instance has no frontend timer!");
- return *FrontendTimer;
- }
-
- /// }
- /// @name Output Files
- /// {
-
- /// addOutputFile - Add an output file onto the list of tracked output files.
- ///
- /// \param OutFile - The output file info.
- void addOutputFile(OutputFile &&OutFile);
-
- /// clearOutputFiles - Clear the output file list, destroying the contained
- /// output streams.
- ///
- /// \param EraseFiles - If true, attempt to erase the files from disk.
- void clearOutputFiles(bool EraseFiles);
-
- /// }
- /// @name Construction Utility Methods
- /// {
-
- /// Create the diagnostics engine using the invocation's diagnostic options
- /// and replace any existing one with it.
- ///
- /// Note that this routine also replaces the diagnostic client,
- /// allocating one if one is not provided.
- ///
- /// \param Client If non-NULL, a diagnostic client that will be
- /// attached to (and, then, owned by) the DiagnosticsEngine inside this AST
- /// unit.
- ///
- /// \param ShouldOwnClient If Client is non-NULL, specifies whether
- /// the diagnostic object should take ownership of the client.
- void createDiagnostics(DiagnosticConsumer *Client = nullptr,
- bool ShouldOwnClient = true);
-
- /// Create a DiagnosticsEngine object with a the TextDiagnosticPrinter.
- ///
- /// If no diagnostic client is provided, this creates a
- /// DiagnosticConsumer that is owned by the returned diagnostic
- /// object, if using directly the caller is responsible for
- /// releasing the returned DiagnosticsEngine's client eventually.
- ///
- /// \param Opts - The diagnostic options; note that the created text
- /// diagnostic object contains a reference to these options.
- ///
- /// \param Client If non-NULL, a diagnostic client that will be
- /// attached to (and, then, owned by) the returned DiagnosticsEngine
- /// object.
- ///
- /// \param CodeGenOpts If non-NULL, the code gen options in use, which may be
- /// used by some diagnostics printers (for logging purposes only).
- ///
- /// \return The new object on success, or null on failure.
- static IntrusiveRefCntPtr<DiagnosticsEngine>
- createDiagnostics(DiagnosticOptions *Opts,
- DiagnosticConsumer *Client = nullptr,
- bool ShouldOwnClient = true,
- const CodeGenOptions *CodeGenOpts = nullptr);
-
- /// Create the file manager and replace any existing one with it.
- void createFileManager();
-
- /// Create the source manager and replace any existing one with it.
- void createSourceManager(FileManager &FileMgr);
-
- /// Create the preprocessor, using the invocation, file, and source managers,
- /// and replace any existing one with it.
- void createPreprocessor(TranslationUnitKind TUKind);
-
- std::string getSpecificModuleCachePath();
-
- /// Create the AST context.
- void createASTContext();
-
- /// Create an external AST source to read a PCH file and attach it to the AST
- /// context.
- void createPCHExternalASTSource(StringRef Path, bool DisablePCHValidation,
- bool AllowPCHWithCompilerErrors,
- void *DeserializationListener,
- bool OwnDeserializationListener);
-
- /// Create an external AST source to read a PCH file.
- ///
- /// \return - The new object on success, or null on failure.
- static IntrusiveRefCntPtr<ASTReader> createPCHExternalASTSource(
- StringRef Path, StringRef Sysroot, bool DisablePCHValidation,
- bool AllowPCHWithCompilerErrors, Preprocessor &PP, ASTContext &Context,
- const PCHContainerReader &PCHContainerRdr,
- ArrayRef<IntrusiveRefCntPtr<ModuleFileExtension>> Extensions,
- void *DeserializationListener, bool OwnDeserializationListener,
- bool Preamble, bool UseGlobalModuleIndex);
-
- /// Create a code completion consumer using the invocation; note that this
- /// will cause the source manager to truncate the input source file at the
- /// completion point.
- void createCodeCompletionConsumer();
-
- /// Create a code completion consumer to print code completion results, at
- /// \p Filename, \p Line, and \p Column, to the given output stream \p OS.
- static CodeCompleteConsumer *createCodeCompletionConsumer(
- Preprocessor &PP, StringRef Filename, unsigned Line, unsigned Column,
- const CodeCompleteOptions &Opts, raw_ostream &OS);
-
- /// \brief Create the Sema object to be used for parsing.
- void createSema(TranslationUnitKind TUKind,
- CodeCompleteConsumer *CompletionConsumer);
-
- /// Create the frontend timer and replace any existing one with it.
- void createFrontendTimer();
-
- /// Create the default output file (from the invocation's options) and add it
- /// to the list of tracked output files.
- ///
- /// The files created by this function always use temporary files to write to
- /// their result (that is, the data is written to a temporary file which will
- /// atomically replace the target output on success).
- ///
- /// \return - Null on error.
- raw_pwrite_stream *createDefaultOutputFile(bool Binary = true,
- StringRef BaseInput = "",
- StringRef Extension = "");
-
- /// Create a new output file and add it to the list of tracked output files,
- /// optionally deriving the output path name.
- ///
- /// \return - Null on error.
- raw_pwrite_stream *createOutputFile(StringRef OutputPath, bool Binary,
- bool RemoveFileOnSignal,
- StringRef BaseInput, StringRef Extension,
- bool UseTemporary,
- bool CreateMissingDirectories = false);
-
- /// Create a new output file, optionally deriving the output path name.
- ///
- /// If \p OutputPath is empty, then createOutputFile will derive an output
- /// path location as \p BaseInput, with any suffix removed, and \p Extension
- /// appended. If \p OutputPath is not stdout and \p UseTemporary
- /// is true, createOutputFile will create a new temporary file that must be
- /// renamed to \p OutputPath in the end.
- ///
- /// \param OutputPath - If given, the path to the output file.
- /// \param Error [out] - On failure, the error.
- /// \param BaseInput - If \p OutputPath is empty, the input path name to use
- /// for deriving the output path.
- /// \param Extension - The extension to use for derived output names.
- /// \param Binary - The mode to open the file in.
- /// \param RemoveFileOnSignal - Whether the file should be registered with
- /// llvm::sys::RemoveFileOnSignal. Note that this is not safe for
- /// multithreaded use, as the underlying signal mechanism is not reentrant
- /// \param UseTemporary - Create a new temporary file that must be renamed to
- /// OutputPath in the end.
- /// \param CreateMissingDirectories - When \p UseTemporary is true, create
- /// missing directories in the output path.
- /// \param ResultPathName [out] - If given, the result path name will be
- /// stored here on success.
- /// \param TempPathName [out] - If given, the temporary file path name
- /// will be stored here on success.
- std::unique_ptr<raw_pwrite_stream>
- createOutputFile(StringRef OutputPath, std::error_code &Error, bool Binary,
- bool RemoveFileOnSignal, StringRef BaseInput,
- StringRef Extension, bool UseTemporary,
- bool CreateMissingDirectories, std::string *ResultPathName,
- std::string *TempPathName);
-
- llvm::raw_null_ostream *createNullOutputFile();
-
- /// }
- /// @name Initialization Utility Methods
- /// {
-
- /// InitializeSourceManager - Initialize the source manager to set InputFile
- /// as the main file.
- ///
- /// \return True on success.
- bool InitializeSourceManager(const FrontendInputFile &Input);
-
- /// InitializeSourceManager - Initialize the source manager to set InputFile
- /// as the main file.
- ///
- /// \return True on success.
- static bool InitializeSourceManager(const FrontendInputFile &Input,
- DiagnosticsEngine &Diags,
- FileManager &FileMgr,
- SourceManager &SourceMgr,
- const FrontendOptions &Opts);
-
- /// }
-
- // Create module manager.
- void createModuleManager();
-
- bool loadModuleFile(StringRef FileName);
-
- ModuleLoadResult loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
- Module::NameVisibilityKind Visibility,
- bool IsInclusionDirective) override;
-
- void makeModuleVisible(Module *Mod, Module::NameVisibilityKind Visibility,
- SourceLocation ImportLoc) override;
-
- bool hadModuleLoaderFatalFailure() const {
- return ModuleLoader::HadFatalFailure;
- }
-
- GlobalModuleIndex *loadGlobalModuleIndex(SourceLocation TriggerLoc) override;
-
- bool lookupMissingImports(StringRef Name, SourceLocation TriggerLoc) override;
-
- void addDependencyCollector(std::shared_ptr<DependencyCollector> Listener) {
- DependencyCollectors.push_back(std::move(Listener));
- }
-};
-
-} // end namespace clang
-
-#endif
OpenPOWER on IntegriCloud