]> granicus.if.org Git - clang/commitdiff
Expose the printing of module maps as part of the ModuleMap::Module
authorDouglas Gregor <dgregor@apple.com>
Tue, 29 Nov 2011 18:17:59 +0000 (18:17 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 29 Nov 2011 18:17:59 +0000 (18:17 +0000)
interface. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145411 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Lex/ModuleMap.h
lib/Lex/ModuleMap.cpp

index f4eb773e704e9da36519dddc883eacb2c94788ff..d38bbe672bd8e83f68bbba86bf58ae466f3a17b7 100644 (file)
@@ -94,13 +94,20 @@ public:
       return false;
     }
     
-    
     /// \brief Retrieve the full name of this module, including the path from
     /// its top-level module.
     std::string getFullModuleName() const;
     
     /// \brief Retrieve the name of the top-level module.
+    ///
     StringRef getTopLevelModuleName() const;
+    
+    /// \brief Print the module map for this module to the given stream. 
+    ///
+    void print(llvm::raw_ostream &OS, unsigned Indent = 0) const;
+    
+    /// \brief Dump the contents of this module to the given output stream.
+    void dump() const;
   };
   
 private:
index b8068cc05d8a39dd53add7b3c2b9e26d63677881..a25c93bfca4afd8f7d31099da7fbc5c583c9fb84 100644 (file)
@@ -68,6 +68,41 @@ StringRef ModuleMap::Module::getTopLevelModuleName() const {
   return Top->Name;
 }
 
+static void indent(llvm::raw_ostream &OS, unsigned Spaces) {
+  OS << std::string(' ', Spaces);
+}
+
+void ModuleMap::Module::print(llvm::raw_ostream &OS, unsigned Indent) const {
+  indent(OS, Indent);
+  if (IsFramework)
+    OS << "framework ";
+  if (IsExplicit)
+    OS << "explicit ";
+  OS << Name << " {\n";
+  
+  if (UmbrellaHeader) {
+    indent(OS, Indent + 2);
+    OS << "umbrella \"" << UmbrellaHeader->getName() << "\"\n";
+  }
+  
+  for (unsigned I = 0, N = Headers.size(); I != N; ++I) {
+    indent(OS, Indent + 2);
+    OS << "header \"" << Headers[I]->getName() << "\"\n";
+  }
+  
+  for (llvm::StringMap<Module *>::const_iterator MI = SubModules.begin(), 
+                                              MIEnd = SubModules.end();
+       MI != MIEnd; ++MI)
+    MI->getValue()->print(OS, Indent + 2);
+  
+  indent(OS, Indent);
+  OS << "}\n";
+}
+
+void ModuleMap::Module::dump() const {
+  print(llvm::errs());
+}
+
 //----------------------------------------------------------------------------//
 // Module map
 //----------------------------------------------------------------------------//
@@ -171,45 +206,12 @@ ModuleMap::inferFrameworkModule(StringRef ModuleName,
   return Result;
 }
 
-static void indent(llvm::raw_ostream &OS, unsigned Spaces) {
-  OS << std::string(' ', Spaces);
-}
-
-static void dumpModule(llvm::raw_ostream &OS, ModuleMap::Module *M, 
-                       unsigned Indent) {
-  indent(OS, Indent);
-  if (M->IsFramework)
-    OS << "framework ";
-  if (M->IsExplicit)
-    OS << "explicit ";
-  OS << M->Name << " {\n";
-  
-  if (M->UmbrellaHeader) {
-    indent(OS, Indent + 2);
-    OS << "umbrella \"" << M->UmbrellaHeader->getName() << "\"\n";
-  }
-  
-  for (unsigned I = 0, N = M->Headers.size(); I != N; ++I) {
-    indent(OS, Indent + 2);
-    OS << "header \"" << M->Headers[I]->getName() << "\"\n";
-  }
-  
-  for (llvm::StringMap<ModuleMap::Module *>::iterator 
-            MI = M->SubModules.begin(), 
-         MIEnd = M->SubModules.end();
-       MI != MIEnd; ++MI)
-    dumpModule(llvm::errs(), MI->getValue(), Indent + 2);
-  
-  indent(OS, Indent);
-  OS << "}\n";
-}
-
 void ModuleMap::dump() {
   llvm::errs() << "Modules:";
   for (llvm::StringMap<Module *>::iterator M = Modules.begin(), 
                                         MEnd = Modules.end(); 
        M != MEnd; ++M)
-    dumpModule(llvm::errs(), M->getValue(), 2);
+    M->getValue()->print(llvm::errs(), 2);
   
   llvm::errs() << "Headers:";
   for (llvm::DenseMap<const FileEntry *, Module *>::iterator