aboutsummaryrefslogtreecommitdiff
path: root/lib/Lex/ModuleMap.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-12-05 17:28:06 +0000
committerDouglas Gregor <dgregor@apple.com>2011-12-05 17:28:06 +0000
commit0adaa880993ad23186c87c7f98e7a3fd2697742c (patch)
treead45854454861d185a11fb6dd96498f454d48441 /lib/Lex/ModuleMap.cpp
parent4bc8738d837e5d401235f99e55277338e20e3651 (diff)
Implement support for wildcard exports in modules, allowing a module
to re-export anything that it imports. This opt-in feature makes a module behave more like a header, because it can be used to re-export the transitive closure of a (sub)module's dependencies. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145811 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex/ModuleMap.cpp')
-rw-r--r--lib/Lex/ModuleMap.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/Lex/ModuleMap.cpp b/lib/Lex/ModuleMap.cpp
index b20ccd122f..02848eef6d 100644
--- a/lib/Lex/ModuleMap.cpp
+++ b/lib/Lex/ModuleMap.cpp
@@ -31,6 +31,12 @@ Module::ExportDecl
ModuleMap::resolveExport(Module *Mod,
const Module::UnresolvedExportDecl &Unresolved,
bool Complain) {
+ // We may have just a wildcard.
+ if (Unresolved.Id.empty()) {
+ assert(Unresolved.Wildcard && "Invalid unresolved export");
+ return Module::ExportDecl(0, true);
+ }
+
// Find the starting module.
Module *Context = lookupModuleUnqualified(Unresolved.Id[0].first, Mod);
if (!Context) {
@@ -229,7 +235,7 @@ bool ModuleMap::resolveExports(Module *Mod, bool Complain) {
for (unsigned I = 0, N = Mod->UnresolvedExports.size(); I != N; ++I) {
Module::ExportDecl Export = resolveExport(Mod, Mod->UnresolvedExports[I],
Complain);
- if (Export.getPointer())
+ if (Export.getPointer() || Export.getInt())
Mod->Exports.push_back(Export);
else
HadError = true;
@@ -764,6 +770,7 @@ void ModuleMapParser::parseExportDecl() {
if(Tok.is(MMToken::Star)) {
Wildcard = true;
+ consumeToken();
break;
}