[cfe-commits] r145439 - /cfe/trunk/lib/Lex/ModuleMap.cpp
Douglas Gregor
dgregor at apple.com
Tue Nov 29 16:57:59 PST 2011
Sent from my iPhone
On Nov 29, 2011, at 2:57 PM, Chris Lattner <clattner at apple.com> wrote:
> On Nov 29, 2011, at 2:27 PM, Douglas Gregor wrote:
>> 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.
>>
>> +static void printEscapedString(llvm::raw_ostream &OS, StringRef String) {
>
> This looks familiar, should it become a method on StringRef or something?
I couldn't decide where up put it <g>. I'll move it into StringRef.
> -Chris
>
>> + 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(),
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list