clang: include/clang/Basic/Module.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#ifndef LLVM_CLANG_BASIC_MODULE_H
16#define LLVM_CLANG_BASIC_MODULE_H
17
21#include "llvm/ADT/ArrayRef.h"
22#include "llvm/ADT/DenseSet.h"
23#include "llvm/ADT/PointerIntPair.h"
24#include "llvm/ADT/STLExtras.h"
25#include "llvm/ADT/SetVector.h"
26#include "llvm/ADT/SmallVector.h"
27#include "llvm/ADT/StringMap.h"
28#include "llvm/ADT/StringRef.h"
29#include "llvm/ADT/iterator_range.h"
30#include
31#include
32#include
33#include
34#include
35#include
36#include
37#include
38#include
39#include
40
41namespace llvm {
42
43class raw_ostream;
44
45}
46
48
53
54
56
57
59 using BaseT = std::array<uint8_t, 20>;
60
61 static constexpr size_t size = std::tuple_size::value;
62
64
65 explicit operator bool() const { return *this != BaseT({{0}}); }
66
67
68
69
71
72
74 uint64_t Value = 0;
75 static_assert(sizeof(*this) >= sizeof(uint64_t), "No need to truncate.");
76 for (unsigned I = 0; I < sizeof(uint64_t); ++I)
77 Value |= static_cast<uint64_t>((*this)[I]) << (I * 8);
79 }
80
84
87 Sentinel.fill(0xFF);
88 return Sentinel;
89 }
90
93 Dummy.fill(0x00);
94 return Dummy;
95 }
96
97 template
100 "Wrong amount of bytes to create an ASTFileSignature");
101
103 std::copy(First, Last, Signature.begin());
104 return Signature;
105 }
106};
107
108
110
111 LLVM_PREFERRED_TYPE(bool)
113
114
115 LLVM_PREFERRED_TYPE(bool)
117
118
119 LLVM_PREFERRED_TYPE(bool)
121
122
123
124 LLVM_PREFERRED_TYPE(bool)
126
130};
131
132
133
134
135
136class ModuleConstructorTag {
137 explicit ModuleConstructorTag() = default;
138 friend ModuleMap;
139};
140
141
142
143
145public:
146
148
149
151
152
153
154
156
157
159
160
162
163
165
166
168
169
171
172
174
175
176
178
179
181
182
183
184
186 };
187
188
190
191
192
194
195
196
197
199
200
201
203
204
205 std::variant<std::monostate, FileEntryRef, DirectoryEntryRef> Umbrella;
206
207
209
210
212
213
215
216
217
219
220
222
223
225 switch (Kind) {
231 return true;
232 default:
233 return false;
234 }
235 }
236
237
238
248
250
252
253private:
254
255 std::vector<Module *> SubModules;
256
257
258
259 mutable llvm::StringMap SubModuleIndex;
260
261
262
264
265
267
268
269 std::vectorstd::string TopHeaderNames;
270
271
272 mutable llvm::DenseSet<const Module*> VisibleModulesCache;
273
274
275 unsigned VisibilityID;
276
277public:
285
286
292
293private:
294 static const int NumHeaderKinds = HK_Excluded + 1;
295
296
297 unsigned HeaderKindBeginIndex[NumHeaderKinds + 1] = {};
299
300public:
303 assert(HK < NumHeaderKinds && "Invalid Module::HeaderKind");
304 auto BeginIt = HeadersStorage.begin() + HeaderKindBeginIndex[HK];
305 auto EndIt = HeadersStorage.begin() + HeaderKindBeginIndex[HK + 1];
306 return {BeginIt, EndIt};
307 }
309 assert(HK < NumHeaderKinds && "Invalid Module::HeaderKind");
310 auto EndIt = HeadersStorage.begin() + HeaderKindBeginIndex[HK + 1];
311 HeadersStorage.insert(EndIt, std::move(H));
312 for (unsigned HKI = HK + 1; HKI != NumHeaderKinds + 1; ++HKI)
313 ++HeaderKindBeginIndex[HKI];
314 }
315
316
322
323
324
331 std::optional<off_t> Size;
333 };
334
335
336
338
339
340
342
347
348
349
350
351
353
354
356
357
358
359
360 LLVM_PREFERRED_TYPE(bool)
362
363
364 LLVM_PREFERRED_TYPE(bool)
366
367
368
369
370
371 LLVM_PREFERRED_TYPE(bool)
373
374
375 LLVM_PREFERRED_TYPE(bool)
377
378
379 LLVM_PREFERRED_TYPE(bool)
381
382
383 LLVM_PREFERRED_TYPE(bool)
385
386
387
388 LLVM_PREFERRED_TYPE(bool)
390
391
392
393
394 LLVM_PREFERRED_TYPE(bool)
396
397
398 LLVM_PREFERRED_TYPE(bool)
400
401
402
403
404
405 LLVM_PREFERRED_TYPE(bool)
407
408
409
410 LLVM_PREFERRED_TYPE(bool)
412
413
414
415 LLVM_PREFERRED_TYPE(bool)
417
418
419
420
421
422
423 LLVM_PREFERRED_TYPE(bool)
425
426
427
428 LLVM_PREFERRED_TYPE(bool)
430
431
432
433 LLVM_PREFERRED_TYPE(bool)
435
436
437
438 LLVM_PREFERRED_TYPE(bool)
440
441
442
449
450
452
453
455
456
457
459
460
461
463
464
465
466
467
468 using ExportDecl = llvm::PointerIntPair<Module *, 1, bool>;
469
470
472
473
474
476
478
479
481
482
483
484
486 };
487
488
490
491
493
494
496
497
498
500
501
502
507
508
509
510
511
513
514
516 };
517
518
519
521
522
523
525
526
527
529
530
538
539
540
542
543
551
552
554
555
558 unsigned VisibilityID);
559
561
562
564
565
566
567
568
569
570
571
572
573
574
575
576
577
580
581
583
584
585
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
607 Requirement &Req,
608 UnresolvedHeaderDirective &MissingHeader,
610
611
613
614
615
616
617
618
619
621
622
623
624
626 for (const Module *Mod = this; Mod; Mod = Mod->Parent)
627 if (Mod->IsFramework)
628 return true;
629
630 return false;
631 }
632
633
634
638
639
640
644 Parent->SubModules.push_back(this);
645 }
646
647
651
652
657
658
662
663
667
668
670
674
675
679
683
685
686
688
689
690
691
692
693
695 return "";
696
698 auto pos = Name.find(':');
699 return StringRef(Name.data(), pos);
700 }
701
704
706 }
707
708
709
710
711
712 std::string getFullModuleName(bool AllowStringLiterals = false) const;
713
714
715
716
717
719
720
721
723 return const_cast<Module *>(
724 const_cast<const Module *>(this)->getTopLevelModule());
725 }
726
727
728
730
731
735
736
740
741
746
747
749 if (const auto *Dir = std::get_if(&Umbrella))
752 return std::nullopt;
753 }
754
755
757 if (const auto *Hdr = std::get_if(&Umbrella))
759 *Hdr};
760 return std::nullopt;
761 }
762
763
764
765
767
768
770
771
773 TopHeaderNames.push_back(std::string(Filename));
774 }
775
776
778
779
780
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
800
801
803
804
805
806
808
809
810
811
812
814
815
816
817
818
820
821
822
823
824
825
826
828 if (VisibleModulesCache.empty())
829 buildVisibleModulesCache();
830 return VisibleModulesCache.count(M);
831 }
832
834
837
838 llvm::iterator_range<submodule_iterator> submodules() {
839 return llvm::make_range(SubModules.begin(), SubModules.end());
840 }
841 llvm::iterator_range<submodule_const_iterator> submodules() const {
842 return llvm::make_range(SubModules.begin(), SubModules.end());
843 }
844
845
846
847
848
850
852 return "";
853 }
854
855
856 void print(raw_ostream &OS, unsigned Indent = 0, bool Dump = false) const;
857
858
859 void dump() const;
860
861private:
862 void buildVisibleModulesCache() const;
863};
864
865
867public:
870 : ImportLocs(std::move(O.ImportLocs)), Generation(O.Generation ? 1 : 0) {
871 O.ImportLocs.clear();
872 ++O.Generation;
873 }
874
875
876
878 ImportLocs = std::move(O.ImportLocs);
879 O.ImportLocs.clear();
880 ++O.Generation;
881 ++Generation;
882 return *this;
883 }
884
885
886
888
889
893
894
900
901
902
904
905
906
907
910 StringRef Message)>;
911
912
917
918private:
919
920
921 std::vector ImportLocs;
922
923
924 unsigned Generation = 0;
925};
926
927}
928
929#endif
Defines interfaces for clang::DirectoryEntry and clang::DirectoryEntryRef.
Defines interfaces for clang::FileEntry and clang::FileEntryRef.
Defines the clang::SourceLocation class and associated facilities.
A reference to a DirectoryEntry that includes the name of the directory as it was accessed by the Fil...
A reference to a FileEntry that includes the name of the file as it was accessed by the FileManager's...
Implements support for file system lookup, file system caching, and directory search management.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Required to construct a Module.
Definition Module.h:136
Describes a module or submodule.
Definition Module.h:144
StringRef getTopLevelModuleName() const
Retrieve the name of the top-level module.
Definition Module.h:732
void addRequirement(StringRef Feature, bool RequiredState, const LangOptions &LangOpts, const TargetInfo &Target)
Add the given feature requirement to the list of features required by this module.
unsigned IsExplicit
Whether this is an explicit submodule.
Definition Module.h:384
SmallVector< ExportDecl, 2 > Exports
The set of export declarations.
Definition Module.h:471
bool isForBuilding(const LangOptions &LangOpts) const
Determine whether this module can be built in this compilation.
std::variant< std::monostate, FileEntryRef, DirectoryEntryRef > Umbrella
The umbrella header or directory.
Definition Module.h:205
unsigned InferSubmodules
Whether we should infer submodules for this module based on the headers.
Definition Module.h:406
ArrayRef< Header > getAllHeaders() const
Definition Module.h:301
Module * findSubmodule(StringRef Name) const
Find the submodule with the given name.
bool directlyUses(const Module *Requested)
Determine whether this module has declared its intention to directly use another module.
bool isNamedModuleInterfaceHasInit() const
Definition Module.h:684
std::vector< std::string > ConfigMacros
The set of "configuration macros", which are macros that (intentionally) change how this module is bu...
Definition Module.h:528
SourceLocation InferredSubmoduleLoc
The location of the inferred submodule.
Definition Module.h:454
unsigned IsUnimportable
Whether this module has declared itself unimportable, either because it's missing a requirement from ...
Definition Module.h:361
bool isInterfaceOrPartition() const
Definition Module.h:671
NameVisibilityKind NameVisibility
The visibility of names within this particular module.
Definition Module.h:451
bool isModulePartitionImplementation() const
Is this a module partition implementation unit.
Definition Module.h:659
NameVisibilityKind
Describes the visibility of the various names within a particular module.
Definition Module.h:443
@ Hidden
All of the names in this module are hidden.
Definition Module.h:445
@ AllVisible
All of the names in this module are visible.
Definition Module.h:447
void print(raw_ostream &OS, unsigned Indent=0, bool Dump=false) const
Print the module map for this module to the given stream.
bool isNamedModuleUnit() const
Is this a C++20 named module unit.
Definition Module.h:676
SourceLocation DefinitionLoc
The location of the module definition.
Definition Module.h:150
SmallVector< UnresolvedHeaderDirective, 1 > MissingHeaders
Headers that are mentioned in the module map file but could not be found on the file system.
Definition Module.h:341
Module(ModuleConstructorTag, StringRef Name, SourceLocation DefinitionLoc, Module *Parent, bool IsFramework, bool IsExplicit, unsigned VisibilityID)
Construct a new module or submodule.
Module * Parent
The parent of this module.
Definition Module.h:193
void markUnavailable(bool Unimportable)
Mark this module and all of its submodules as unavailable.
SmallVector< UnresolvedHeaderDirective, 1 > UnresolvedHeaders
Headers that are mentioned in the module map file but that we have not yet attempted to resolve to a ...
Definition Module.h:337
ModuleKind Kind
The kind of this module.
Definition Module.h:189
bool isPrivateModule() const
Definition Module.h:249
HeaderKind
Definition Module.h:278
@ HK_Textual
Definition Module.h:280
@ HK_Excluded
Definition Module.h:283
@ HK_PrivateTextual
Definition Module.h:282
@ HK_Private
Definition Module.h:281
@ HK_Normal
Definition Module.h:279
void addTopHeaderFilename(StringRef Filename)
Add a top-level header filename associated with this module.
Definition Module.h:772
bool isUnimportable() const
Determine whether this module has been declared unimportable.
Definition Module.h:563
bool fullModuleNameIs(ArrayRef< StringRef > nameParts) const
Whether the full name of this module is equal to joining nameParts with "."s.
Module * getPrivateModuleFragment() const
Get the Private Module Fragment (sub-module) for this module, it there is one.
void setASTFile(OptionalFileEntryRef File)
Set the serialized AST file for the top-level module of this module.
Definition Module.h:742
unsigned IsInferred
Whether this is an inferred submodule (module * { ... }).
Definition Module.h:399
llvm::SmallSetVector< Module *, 2 > Imports
The set of modules imported by this module, and on which this module depends.
Definition Module.h:458
bool isModuleVisible(const Module *M) const
Determine whether the specified module would be visible to a lookup at the end of this module.
Definition Module.h:827
unsigned IsSystem
Whether this is a "system" module (which assumes that all headers in it are system headers).
Definition Module.h:389
bool isModuleInterfaceUnit() const
Definition Module.h:680
static StringRef getModuleInputBufferName()
Definition Module.h:851
std::string Name
The name of this module.
Definition Module.h:147
Module * getGlobalModuleFragment() const
Get the Global Module Fragment (sub-module) for this module, it there is one.
bool isSubFramework() const
Determine whether this module is a subframework of another framework.
Definition Module.h:635
llvm::iterator_range< submodule_iterator > submodules()
Definition Module.h:838
unsigned IsExternC
Whether this is an 'extern "C"' module (which implicitly puts all headers in it within an 'extern "C"...
Definition Module.h:395
bool isModuleMapModule() const
Definition Module.h:251
unsigned ModuleMapIsPrivate
Whether this module came from a "private" module map, found next to a regular (public) module map.
Definition Module.h:434
llvm::SmallVector< LinkLibrary, 2 > LinkLibraries
The set of libraries or frameworks to link against when an entity from this module is used.
Definition Module.h:520
SmallVector< UnresolvedExportDecl, 2 > UnresolvedExports
The set of export declarations that have yet to be resolved.
Definition Module.h:489
void addHeader(HeaderKind HK, Header H)
Definition Module.h:308
void setParent(Module *M)
Set the parent of this module.
Definition Module.h:641
std::optional< Header > getUmbrellaHeaderAsWritten() const
Retrieve the umbrella header as written.
Definition Module.h:756
unsigned getVisibilityID() const
Definition Module.h:833
SmallVector< Requirement, 2 > Requirements
The set of language features required to use this module.
Definition Module.h:352
bool isHeaderLikeModule() const
Is this module have similar semantics as headers.
Definition Module.h:648
bool isModuleImplementation() const
Is this a module implementation.
Definition Module.h:664
llvm::SmallSetVector< const Module *, 2 > UndeclaredUses
When NoUndeclaredIncludes is true, the set of modules this module tried to import but didn't because ...
Definition Module.h:499
std::string UmbrellaRelativeToRootModuleDirectory
Definition Module.h:214
OptionalDirectoryEntryRef Directory
The build directory of this module.
Definition Module.h:198
std::vector< Module * >::iterator submodule_iterator
Definition Module.h:835
llvm::iterator_range< submodule_const_iterator > submodules() const
Definition Module.h:841
SmallVector< ModuleId, 2 > UnresolvedDirectUses
The set of use declarations that have yet to be resolved.
Definition Module.h:495
unsigned NamedModuleHasInit
Whether this C++20 named modules doesn't need an initializer.
Definition Module.h:439
unsigned NoUndeclaredIncludes
Whether files in this module can only include non-modular headers and headers from used modules.
Definition Module.h:429
StringRef getPrimaryModuleInterfaceName() const
Get the primary module interface name from a partition.
Definition Module.h:687
bool isModulePartition() const
Is this a module partition.
Definition Module.h:653
llvm::SmallSetVector< Module *, 2 > AffectingClangModules
The set of top-level modules that affected the compilation of this module, but were not imported.
Definition Module.h:462
SmallVector< Module *, 2 > DirectUses
The directly used modules.
Definition Module.h:492
unsigned ConfigMacrosExhaustive
Whether the set of configuration macros is exhaustive.
Definition Module.h:424
std::string PresumedModuleMapFile
The presumed file name for the module map defining this module.
Definition Module.h:202
std::string APINotesFile
For the debug info, the path to this module's .apinotes file, if any.
Definition Module.h:221
ASTFileSignature Signature
The module signature.
Definition Module.h:208
bool isExplicitGlobalModule() const
Definition Module.h:242
ArrayRef< Header > getHeaders(HeaderKind HK) const
Definition Module.h:302
bool isGlobalModule() const
Does this Module scope describe a fragment of the global module within some C++ module.
Definition Module.h:239
unsigned InferExportWildcard
Whether, when inferring submodules, the inferr submodules should export all modules they import (e....
Definition Module.h:416
bool isSubModule() const
Determine whether this module is a submodule.
Definition Module.h:612
void getExportedModules(SmallVectorImpl< Module * > &Exported) const
Appends this module's list of exported modules to Exported.
std::vector< UnresolvedConflict > UnresolvedConflicts
The list of conflicts for which the module-id has not yet been resolved.
Definition Module.h:541
unsigned IsFromModuleFile
Whether this module was loaded from a module file.
Definition Module.h:376
bool isSubModuleOf(const Module *Other) const
Check if this module is a (possibly transitive) submodule of Other.
bool isPartOfFramework() const
Determine whether this module is a part of a framework, either because it is a framework module or be...
Definition Module.h:625
ArrayRef< FileEntryRef > getTopHeaders(FileManager &FileMgr)
The top-level headers associated with this module.
bool isAvailable() const
Determine whether this module is available for use within the current translation unit.
Definition Module.h:586
llvm::PointerIntPair< Module *, 1, bool > ExportDecl
Describes an exported module.
Definition Module.h:468
std::optional< DirectoryName > getUmbrellaDirAsWritten() const
Retrieve the umbrella directory as written.
Definition Module.h:748
unsigned HasIncompatibleModuleFile
Whether we tried and failed to load a module file for this module.
Definition Module.h:365
bool isImplicitGlobalModule() const
Definition Module.h:245
bool isHeaderUnit() const
Is this module a header unit.
Definition Module.h:669
ModuleKind
Definition Module.h:155
@ ModuleImplementationUnit
This is a C++20 module implementation unit.
Definition Module.h:167
@ ModuleMapModule
This is a module that was defined by a module map and built out of header files.
Definition Module.h:158
@ ImplicitGlobalModuleFragment
This is an implicit fragment of the global module which contains only language linkage declarations (...
Definition Module.h:185
@ ModulePartitionInterface
This is a C++20 module partition interface.
Definition Module.h:170
@ ModuleInterfaceUnit
This is a C++20 module interface unit.
Definition Module.h:164
@ ModuleHeaderUnit
This is a C++20 header unit.
Definition Module.h:161
@ ModulePartitionImplementation
This is a C++20 module partition implementation.
Definition Module.h:173
@ PrivateModuleFragment
This is the private module fragment within some C++ module.
Definition Module.h:180
@ ExplicitGlobalModuleFragment
This is the explicit Global Module Fragment of a modular TU.
Definition Module.h:177
void dump() const
Dump the contents of this module to the given output stream.
Module * ShadowingModule
A module with the same name that shadows this module.
Definition Module.h:355
unsigned IsFramework
Whether this is a framework module.
Definition Module.h:380
std::string ExportAsModule
The module through which entities defined in this module will eventually be exposed,...
Definition Module.h:218
std::string getFullModuleName(bool AllowStringLiterals=false) const
Retrieve the full name of this module, including the path from its top-level module.
bool isNamedModule() const
Does this Module is a named module of a standard named module?
Definition Module.h:224
std::string UmbrellaAsWritten
The name of the umbrella entry, as written in the module map.
Definition Module.h:211
void addTopHeader(FileEntryRef File)
Add a top-level header associated with this module.
std::vector< Module * >::const_iterator submodule_const_iterator
Definition Module.h:836
unsigned IsAvailable
Whether this module is available in the current translation unit.
Definition Module.h:372
unsigned InferExplicitSubmodules
Whether, when inferring submodules, the inferred submodules should be explicit.
Definition Module.h:411
Module * getTopLevelModule()
Retrieve the top-level module for this (sub)module, which may be this module.
Definition Module.h:722
OptionalFileEntryRef getASTFile() const
The serialized AST file for this module, if one was created.
Definition Module.h:737
OptionalDirectoryEntryRef getEffectiveUmbrellaDir() const
Get the effective umbrella directory for this module: either the one explicitly written in the module...
bool UseExportAsModuleLinkName
Autolinking uses the framework name for linking purposes when this is false and the export_as name ot...
Definition Module.h:524
std::vector< Conflict > Conflicts
The list of conflicts.
Definition Module.h:553
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
Exposes information about the current target.
void setVisible(Module *M, SourceLocation Loc, bool IncludeExports=true, VisibleCallback Vis=[](Module *) {}, ConflictCallback Cb=[](ArrayRef< Module * >, Module *, StringRef) {})
Make a specific module visible.
VisibleModuleSet()=default
llvm::function_ref< void(Module *M)> VisibleCallback
A callback to call when a module is made visible (directly or indirectly) by a call to setVisible.
Definition Module.h:903
SourceLocation getImportLoc(const Module *M) const
Get the location at which the import of a module was triggered.
Definition Module.h:895
llvm::function_ref< void(ArrayRef< Module * > Path, Module *Conflict, StringRef Message)> ConflictCallback
A callback to call when a module conflict is found.
Definition Module.h:908
bool isVisible(const Module *M) const
Determine whether a module is visible.
Definition Module.h:890
unsigned getGeneration() const
Get the current visibility generation.
Definition Module.h:887
VisibleModuleSet & operator=(VisibleModuleSet &&O)
Move from another visible modules set.
Definition Module.h:877
VisibleModuleSet(VisibleModuleSet &&O)
Definition Module.h:869
The JSON file list parser is used to communicate input to InstallAPI.
CustomizableOptional< FileEntryRef > OptionalFileEntryRef
SmallVector< std::pair< std::string, SourceLocation >, 2 > ModuleId
Describes the name of a module.
Definition Module.h:55
raw_ostream & Indent(raw_ostream &Out, const unsigned int Space, bool IsDot)
@ Module
Module linkage, which indicates that the entity can be referred to from other translation units withi...
CustomizableOptional< DirectoryEntryRef > OptionalDirectoryEntryRef
@ Other
Other implicit parameter.
Diagnostic wrappers for TextAPI types for error reporting.
The signature of a module, which is a hash of the AST content.
Definition Module.h:58
uint64_t truncatedValue() const
Returns the value truncated to the size of an uint64_t.
Definition Module.h:73
static constexpr size_t size
Definition Module.h:61
static ASTFileSignature create(std::array< uint8_t, 20 > Bytes)
Definition Module.h:81
ASTFileSignature(BaseT S={{0}})
Definition Module.h:63
static ASTFileSignature createDummy()
Definition Module.h:91
std::array< uint8_t, 20 > BaseT
Definition Module.h:59
static ASTFileSignature createDISentinel()
Definition Module.h:85
static ASTFileSignature create(InputIt First, InputIt Last)
Definition Module.h:98
unsigned IsExternC
Whether this is an extern "C" module.
Definition Module.h:116
unsigned IsSystem
Whether this is a system module.
Definition Module.h:112
unsigned IsExhaustive
Whether this is an exhaustive set of configuration macros.
Definition Module.h:120
ModuleAttributes()
Definition Module.h:127
unsigned NoUndeclaredIncludes
Whether files in this module can only include non-modular headers and headers from used modules.
Definition Module.h:125
A conflict between two modules.
Definition Module.h:544
Module * Other
The module that this module conflicts with.
Definition Module.h:546
std::string Message
The message provided to the user when there is a conflict.
Definition Module.h:549
Information about a directory name as found in the module map file.
Definition Module.h:317
std::string PathRelativeToRootModuleDirectory
Definition Module.h:319
DirectoryEntryRef Entry
Definition Module.h:320
std::string NameAsWritten
Definition Module.h:318
bool IsFramework
Whether this is a framework rather than a library.
Definition Module.h:515
LinkLibrary(const std::string &Library, bool IsFramework)
Definition Module.h:505
std::string Library
The library to link against.
Definition Module.h:512
std::string FeatureName
Definition Module.h:344
bool RequiredState
Definition Module.h:345
An unresolved conflict with another module.
Definition Module.h:531
std::string Message
The message provided to the user when there is a conflict.
Definition Module.h:536
ModuleId Id
The (unresolved) module id.
Definition Module.h:533
Describes an exported module that has not yet been resolved (perhaps because the module it refers to ...
Definition Module.h:475
bool Wildcard
Whether this export declaration ends in a wildcard, indicating that all of its submodules should be e...
Definition Module.h:485
ModuleId Id
The name of the module.
Definition Module.h:480
SourceLocation ExportLoc
The location of the 'export' keyword in the module map file.
Definition Module.h:477