clang 20.0.0git
|
#include "clang/Lex/ModuleMap.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/Module.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/LexDiagnostic.h"
#include "clang/Lex/Lexer.h"
#include "clang/Lex/LiteralSupport.h"
#include "clang/Lex/Token.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <cstring>
#include <optional>
#include <string>
#include <system_error>
#include <utility>
#include "clang/Basic/TokenKinds.def"
Go to the source code of this file.
Classes | |
struct | clang::MMToken |
A token in a module map file. More... | |
class | clang::ModuleMapParser |
Namespaces | |
namespace | clang |
The JSON file list parser is used to communicate input to InstallAPI. | |
Macros | |
#define | KEYWORD(Keyword, Conditions) .Case(#Keyword, true) |
#define | ALIAS(Keyword, AliasOf, Conditions) .Case(Keyword, true) |
Functions | |
static void | appendSubframeworkPaths (Module *Mod, SmallVectorImpl< char > &Path) |
Append to Paths the set of paths needed to get to the subframework in which the given module lives. | |
static bool | isBuiltinHeaderName (StringRef FileName) |
Determine whether the given file name is the name of a builtin header, supplied by Clang to replace, override, or augment existing system headers. | |
static bool | isBuiltInModuleName (StringRef ModuleName) |
Determine whether the given module name is the name of a builtin module that is cyclic with a system module on some platforms. | |
static StringRef | sanitizeFilenameAsIdentifier (StringRef Name, SmallVectorImpl< char > &Buffer) |
"Sanitize" a filename so that it can be used as an identifier. | |
static bool | violatesPrivateInclude (Module *RequestingModule, const FileEntry *IncFileEnt, ModuleMap::KnownHeader Header) |
static Module * | getTopLevelOrNull (Module *M) |
static bool | isBetterKnownHeader (const ModuleMap::KnownHeader &New, const ModuleMap::KnownHeader &Old) |
static void | inferFrameworkLink (Module *Mod) |
For a framework module, infer the framework against which we should link. | |
static bool | shouldAddRequirement (Module *M, StringRef Feature, bool &IsRequiresExcludedHack) |
Whether to add the requirement Feature to the module M . | |
static bool | compareModuleHeaders (const Module::Header &A, const Module::Header &B) |
static std::string | formatModuleId (const ModuleId &Id) |
Format a module-id into a string. | |
#define ALIAS | ( | Keyword, | |
AliasOf, | |||
Conditions | |||
) | .Case(Keyword, true) |
#define KEYWORD | ( | Keyword, | |
Conditions | |||
) | .Case(#Keyword, true) |
|
static |
Append to Paths
the set of paths needed to get to the subframework in which the given module lives.
Definition at line 163 of file ModuleMap.cpp.
References clang::Module::IsFramework, clang::Module::Name, clang::Module::Parent, and Path.
|
static |
Definition at line 2522 of file ModuleMap.cpp.
References clang::Module::Header::NameAsWritten.
|
static |
Definition at line 492 of file ModuleMap.cpp.
References clang::Module::getTopLevelModule().
Referenced by clang::ModuleMap::diagnoseHeaderInclusion().
|
static |
For a framework module, infer the framework against which we should link.
Definition at line 981 of file ModuleMap.cpp.
References clang::Module::IsFramework, clang::Module::isSubFramework(), clang::Module::LinkLibraries, and clang::Module::Name.
|
static |
Definition at line 578 of file ModuleMap.cpp.
References clang::ModuleMap::ExcludedHeader, clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::isAvailable(), clang::ModuleMap::PrivateHeader, and clang::ModuleMap::TextualHeader.
Referenced by clang::ModuleMap::findModuleForHeader().
|
static |
Determine whether the given file name is the name of a builtin header, supplied by Clang to replace, override, or augment existing system headers.
Definition at line 259 of file ModuleMap.cpp.
References clang::FileName.
Referenced by clang::ModuleMap::isBuiltinHeader(), and clang::ModuleMap::shouldImportRelativeToBuiltinIncludeDir().
|
static |
Determine whether the given module name is the name of a builtin module that is cyclic with a system module on some platforms.
Definition at line 277 of file ModuleMap.cpp.
|
static |
"Sanitize" a filename so that it can be used as an identifier.
Definition at line 379 of file ModuleMap.cpp.
References ALIAS, clang::Default, clang::isAsciiIdentifierContinue(), clang::isDigit(), clang::isValidAsciiIdentifier(), and KEYWORD.
Referenced by clang::ModuleMap::isHeaderUnavailableInModule().
|
static |
Whether to add the requirement Feature
to the module M
.
This preserves backwards compatibility for two hacks in the Darwin system module map files:
The use of 'requires excluded' to make headers non-modular, which should really be mapped to 'textual' now that we have this feature. We drop the 'excluded' requirement, and set IsRequiresExcludedHack
to true. Later, this bit will be used to map all the headers inside this module to 'textual'.
This affects Darwin.C.excluded (for assert.h) and Tcl.Private.
Definition at line 2315 of file ModuleMap.cpp.
References clang::Module::fullModuleNameIs().
|
static |
Definition at line 471 of file ModuleMap.cpp.
References clang::Module::Header::Entry, clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::Headers, clang::Module::HK_Private, clang::Module::HK_PrivateTextual, clang::ModuleMap::KnownHeader::isAccessibleFrom(), and clang::ModuleMap::PrivateHeader.
Referenced by clang::ModuleMap::diagnoseHeaderInclusion().