diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
commit | 2b6b257f4e5503a7a2675bdb8735693db769f75c (patch) | |
tree | e85e046ae7003fe3bcc8b5454cd0fa3f7407b470 /include/clang/Lex/ModuleMap.h | |
parent | b4348ed0b7e90c0831b925fbee00b5f179a99796 (diff) |
Notes
Diffstat (limited to 'include/clang/Lex/ModuleMap.h')
-rw-r--r-- | include/clang/Lex/ModuleMap.h | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/include/clang/Lex/ModuleMap.h b/include/clang/Lex/ModuleMap.h index 155943e5453c8..1e86f736983f6 100644 --- a/include/clang/Lex/ModuleMap.h +++ b/include/clang/Lex/ModuleMap.h @@ -50,6 +50,18 @@ public: /// \param IsSystem Whether this is a module map from a system include path. virtual void moduleMapFileRead(SourceLocation FileStart, const FileEntry &File, bool IsSystem) {} + + /// \brief Called when a header is added during module map parsing. + /// + /// \param Filename The header file itself. + virtual void moduleMapAddHeader(StringRef Filename) {} + + /// \brief Called when an umbrella header is added during module map parsing. + /// + /// \param FileMgr FileManager instance + /// \param Header The umbrella header to collect. + virtual void moduleMapAddUmbrellaHeader(FileManager *FileMgr, + const FileEntry *Header) {} }; class ModuleMap { @@ -70,15 +82,10 @@ class ModuleMap { /// These are always simple C language options. LangOptions MMapLangOpts; - // The module that we are building; related to \c LangOptions::CurrentModule. - Module *CompilingModule; - -public: - // The module that the .cc source file is associated with. + // The module that the main source file is associated with (the module + // named LangOpts::CurrentModule, if we've loaded it). Module *SourceModule; - std::string SourceModuleName; -private: /// \brief The top-level modules that are known. llvm::StringMap<Module *> Modules; @@ -130,6 +137,12 @@ public: return getModule()->isAvailable(); } + /// \brief Whether this header is accessible from the specified module. + bool isAccessibleFrom(Module *M) const { + return !(getRole() & PrivateHeader) || + (M && M->getTopLevelModule() == getModule()->getTopLevelModule()); + } + // \brief Whether this known header is valid (i.e., it has an // associated module). explicit operator bool() const { @@ -318,12 +331,18 @@ public: /// /// \param RequestingModule The module including a file. /// + /// \param RequestingModuleIsModuleInterface \c true if the inclusion is in + /// the interface of RequestingModule, \c false if it's in the + /// implementation of RequestingModule. Value is ignored and + /// meaningless if RequestingModule is nullptr. + /// /// \param FilenameLoc The location of the inclusion's filename. /// /// \param Filename The included filename as written. /// /// \param File The included file. void diagnoseHeaderInclusion(Module *RequestingModule, + bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, const FileEntry *File); |