summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/StmtPrinter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-01-16 19:25:18 +0000
committerChris Lattner <sabre@nondot.org>2009-01-16 19:25:18 +0000
commitbb96cc45ae55203373b53f155b7bc7e9f462bf87 (patch)
tree1e2bb96b7d07694296977b181af9409e29dece97 /clang/lib/AST/StmtPrinter.cpp
parent5f936ef1acfbe298591e22948ade326db528a5cc (diff)
downloadbcm5719-llvm-bb96cc45ae55203373b53f155b7bc7e9f462bf87.tar.gz
bcm5719-llvm-bb96cc45ae55203373b53f155b7bc7e9f462bf87.zip
make ast-print handle random non-printable characters correctly with octal escapes.
llvm-svn: 62337
Diffstat (limited to 'clang/lib/AST/StmtPrinter.cpp')
-rw-r--r--clang/lib/AST/StmtPrinter.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index ea96411e07b..96f54031549 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -663,9 +663,19 @@ void StmtPrinter::VisitStringLiteral(StringLiteral *Str) {
// FIXME: this doesn't print wstrings right.
for (unsigned i = 0, e = Str->getByteLength(); i != e; ++i) {
- switch (Str->getStrData()[i]) {
- default: OS << Str->getStrData()[i]; break;
- // Handle some common ones to make dumps prettier.
+ unsigned char Char = Str->getStrData()[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;
OpenPOWER on IntegriCloud