[cfe-commits] r145439 - /cfe/trunk/lib/Lex/ModuleMap.cpp
Douglas Gregor
dgregor at apple.com
Tue Nov 29 14:27:13 PST 2011
Author: dgregor
Date: Tue Nov 29 16:27:12 2011
New Revision: 145439
URL: http://llvm.org/viewvc/llvm-project?rev=145439&view=rev
Log:
Escape strings when printing module maps, for silly operating systems
that use \ as a separator.
Modified:
cfe/trunk/lib/Lex/ModuleMap.cpp
Modified: cfe/trunk/lib/Lex/ModuleMap.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=145439&r1=145438&r2=145439&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/ModuleMap.cpp (original)
+++ cfe/trunk/lib/Lex/ModuleMap.cpp Tue Nov 29 16:27:12 2011
@@ -72,6 +72,31 @@
OS << std::string(Spaces, ' ');
}
+static void printEscapedString(llvm::raw_ostream &OS, StringRef String) {
+ for (StringRef::iterator I = String.begin(), E = String.end(); I != E; ++I) {
+ unsigned char Char = *I;
+
+ switch (Char) {
+ default:
+ if (isprint(Char))
+ OS << (char)Char;
+ else // Output anything hard as an octal escape.
+ OS << '\\'
+ << (char)('0'+ ((Char >> 6) & 7))
+ << (char)('0'+ ((Char >> 3) & 7))
+ << (char)('0'+ ((Char >> 0) & 7));
+ break;
+ // Handle some common non-printable cases to make dumps prettier.
+ case '\\': OS << "\\\\"; break;
+ case '"': OS << "\\\""; break;
+ case '\n': OS << "\\n"; break;
+ case '\t': OS << "\\t"; break;
+ case '\a': OS << "\\a"; break;
+ case '\b': OS << "\\b"; break;
+ }
+ }
+}
+
void ModuleMap::Module::print(llvm::raw_ostream &OS, unsigned Indent) const {
indent(OS, Indent);
if (IsFramework)
@@ -82,12 +107,16 @@
if (UmbrellaHeader) {
indent(OS, Indent + 2);
- OS << "umbrella \"" << UmbrellaHeader->getName() << "\"\n";
+ OS << "umbrella \"";
+ printEscapedString(OS, UmbrellaHeader->getName());
+ OS << "\"\n";
}
for (unsigned I = 0, N = Headers.size(); I != N; ++I) {
indent(OS, Indent + 2);
- OS << "header \"" << Headers[I]->getName() << "\"\n";
+ OS << "header \"";
+ printEscapedString(OS, Headers[I]->getName());
+ OS << "\"\n";
}
for (llvm::StringMap<Module *>::const_iterator MI = SubModules.begin(),
More information about the cfe-commits
mailing list