]> granicus.if.org Git - clang/commitdiff
Clean up some gross code in the printer here. No more string stream
authorChandler Carruth <chandlerc@gmail.com>
Fri, 25 Feb 2011 20:09:13 +0000 (20:09 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 25 Feb 2011 20:09:13 +0000 (20:09 +0000)
silliness, and actually use the existing facilities of raw_ostream to do
escaping.

This will also hopefully fix an assert when building with signed char
(MSVC I think).

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

lib/AST/TemplateBase.cpp

index 5ab5f4644c88fa879dc8d27f1e2984d727c7fbf8..1764f4ab1f03a915dd3c15e2cfe319f9c279213d 100644 (file)
@@ -24,8 +24,6 @@
 #include "llvm/ADT/FoldingSet.h"
 #include <algorithm>
 #include <cctype>
-#include <iomanip>
-#include <sstream>
 
 using namespace clang;
 
@@ -42,17 +40,11 @@ static void printIntegral(const TemplateArgument &TemplArg,
   if (T->isBooleanType()) {
     Out << (Val->getBoolValue() ? "true" : "false");
   } else if (T->isCharType()) {
-    char Ch = Val->getSExtValue();
-    if (std::isprint(Ch)) {
-      Out << "'";
-      if (Ch == '\'' || Ch == '\\')
-        Out << '\\';
-      Out << Ch << "'";
-    } else {
-      std::ostringstream Str;
-      Str << std::setw(2) << std::setfill('0') << std::hex << (int)Ch;
-      Out << "'\\x" << Str.str() << "'";
-    }
+    const unsigned char Ch = Val->getZExtValue();
+    const std::string Str(1, Ch);
+    Out << ((Ch == '\'') ? "'\\" : "'");
+    Out.write_escaped(Str, /*UseHexEscapes=*/ true);
+    Out << "'";
   } else {
     Out << Val->toString(10);
   }