diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-12-05 22:27:44 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-12-05 22:27:44 +0000 |
commit | 1e12368db12005ddd92fd9188c86383fe30ef443 (patch) | |
tree | 8715bebf398d98fa142c8ac7b80c642b1eb56615 /lib/Basic/Module.cpp | |
parent | bd7d82878c1588afccbee6c68fa6e17bbbab7f2c (diff) |
Parse inferred submodules in module maps, track their contents in
Module, and (de-)serialize this information. Semantics of inferred
submodules to follow.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145864 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/Module.cpp')
-rw-r--r-- | lib/Basic/Module.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/Basic/Module.cpp b/lib/Basic/Module.cpp index c3a8a377c4..97bddfa97e 100644 --- a/lib/Basic/Module.cpp +++ b/lib/Basic/Module.cpp @@ -37,6 +37,14 @@ bool Module::isSubModuleOf(Module *Other) const { return false; } +const Module *Module::getTopLevelModule() const { + const Module *Result = this; + while (Result->Parent) + Result = Result->Parent; + + return Result; +} + std::string Module::getFullModuleName() const { llvm::SmallVector<StringRef, 2> Names; @@ -57,14 +65,6 @@ std::string Module::getFullModuleName() const { return Result; } -StringRef Module::getTopLevelModuleName() const { - const Module *Top = this; - while (Top->Parent) - Top = Top->Parent; - - return Top->Name; -} - static void printModuleId(llvm::raw_ostream &OS, const ModuleId &Id) { for (unsigned I = 0, N = Id.size(); I != N; ++I) { if (I) @@ -96,7 +96,7 @@ void Module::print(llvm::raw_ostream &OS, unsigned Indent) const { } for (llvm::StringMap<Module *>::const_iterator MI = SubModules.begin(), - MIEnd = SubModules.end(); + MIEnd = SubModules.end(); MI != MIEnd; ++MI) MI->getValue()->print(OS, Indent + 2); @@ -126,6 +126,19 @@ void Module::print(llvm::raw_ostream &OS, unsigned Indent) const { OS << "\n"; } + if (InferSubmodules) { + OS.indent(Indent + 2); + if (InferExplicitSubmodules) + OS << "explicit "; + OS << "module * {\n"; + if (InferExportWildcard) { + OS.indent(Indent + 4); + OS << "export *\n"; + } + OS.indent(Indent + 2); + OS << "}\n"; + } + OS.indent(Indent); OS << "}\n"; } |