diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:04:05 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:04:05 +0000 |
commit | 676fbe8105eeb6ff4bb2ed261cb212fcfdbe7b63 (patch) | |
tree | 02a1ac369cb734d0abfa5000dd86e5b7797e6a74 /include/clang/Basic/FileManager.h | |
parent | c7e70c433efc6953dc3888b9fbf9f3512d7da2b0 (diff) |
Diffstat (limited to 'include/clang/Basic/FileManager.h')
-rw-r--r-- | include/clang/Basic/FileManager.h | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h index ab5dfca716397..e7891baf53047 100644 --- a/include/clang/Basic/FileManager.h +++ b/include/clang/Basic/FileManager.h @@ -16,7 +16,7 @@ #define LLVM_CLANG_BASIC_FILEMANAGER_H #include "clang/Basic/FileSystemOptions.h" -#include "clang/Basic/VirtualFileSystem.h" +#include "clang/Basic/LLVM.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/SmallVector.h" @@ -25,9 +25,10 @@ #include "llvm/Support/Allocator.h" #include "llvm/Support/ErrorOr.h" #include "llvm/Support/FileSystem.h" +#include "llvm/Support/VirtualFileSystem.h" #include <ctime> -#include <memory> #include <map> +#include <memory> #include <string> namespace llvm { @@ -69,14 +70,15 @@ class FileEntry { bool IsNamedPipe; bool InPCH; bool IsValid; // Is this \c FileEntry initialized and valid? + bool DeferredOpen; // Created by getFile(OpenFile=0); may open later. /// The open file, if it is owned by the \p FileEntry. - mutable std::unique_ptr<vfs::File> File; + mutable std::unique_ptr<llvm::vfs::File> File; public: FileEntry() - : UniqueID(0, 0), IsNamedPipe(false), InPCH(false), IsValid(false) - {} + : UniqueID(0, 0), IsNamedPipe(false), InPCH(false), IsValid(false), + DeferredOpen(false) {} FileEntry(const FileEntry &) = delete; FileEntry &operator=(const FileEntry &) = delete; @@ -102,6 +104,10 @@ public: void closeFile() const { File.reset(); // rely on destructor to close File } + + // Only for use in tests to see if deferred opens are happening, rather than + // relying on RealPathName being empty. + bool isOpenForTests() const { return File != nullptr; } }; struct FileData; @@ -114,7 +120,7 @@ struct FileData; /// as a single file. /// class FileManager : public RefCountedBase<FileManager> { - IntrusiveRefCntPtr<vfs::FileSystem> FS; + IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS; FileSystemOptions FileSystemOpts; /// Cache for existing real directories. @@ -165,15 +171,18 @@ class FileManager : public RefCountedBase<FileManager> { std::unique_ptr<FileSystemStatCache> StatCache; bool getStatValue(StringRef Path, FileData &Data, bool isFile, - std::unique_ptr<vfs::File> *F); + std::unique_ptr<llvm::vfs::File> *F); /// Add all ancestors of the given path (pointing to either a file /// or a directory) as virtual directories. void addAncestorsAsVirtualDirs(StringRef Path); + /// Fills the RealPathName in file entry. + void fillRealPathName(FileEntry *UFE, llvm::StringRef FileName); + public: FileManager(const FileSystemOptions &FileSystemOpts, - IntrusiveRefCntPtr<vfs::FileSystem> FS = nullptr); + IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS = nullptr); ~FileManager(); /// Installs the provided FileSystemStatCache object within @@ -183,18 +192,10 @@ public: /// /// \param statCache the new stat cache to install. Ownership of this /// object is transferred to the FileManager. - /// - /// \param AtBeginning whether this new stat cache must be installed at the - /// beginning of the chain of stat caches. Otherwise, it will be added to - /// the end of the chain. - void addStatCache(std::unique_ptr<FileSystemStatCache> statCache, - bool AtBeginning = false); - - /// Removes the specified FileSystemStatCache object from the manager. - void removeStatCache(FileSystemStatCache *statCache); + void setStatCache(std::unique_ptr<FileSystemStatCache> statCache); - /// Removes all FileSystemStatCache objects from the manager. - void clearStatCaches(); + /// Removes the FileSystemStatCache object from the manager. + void clearStatCache(); /// Lookup, cache, and verify the specified directory (real or /// virtual). @@ -222,7 +223,7 @@ public: FileSystemOptions &getFileSystemOpts() { return FileSystemOpts; } const FileSystemOptions &getFileSystemOpts() const { return FileSystemOpts; } - IntrusiveRefCntPtr<vfs::FileSystem> getVirtualFileSystem() const { + IntrusiveRefCntPtr<llvm::vfs::FileSystem> getVirtualFileSystem() const { return FS; } @@ -247,8 +248,7 @@ public: /// FileManager's FileSystemOptions. /// /// \returns false on success, true on error. - bool getNoncachedStatValue(StringRef Path, - vfs::Status &Result); + bool getNoncachedStatValue(StringRef Path, llvm::vfs::Status &Result); /// Remove the real file \p Entry from the cache. void invalidateCache(const FileEntry *Entry); |