]> granicus.if.org Git - clang/commitdiff
Add support for PrintingPolicy::SuppressTypeSpecifiers to type printing.
authorEli Friedman <eli.friedman@gmail.com>
Sat, 30 May 2009 00:10:16 +0000 (00:10 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 30 May 2009 00:10:16 +0000 (00:10 +0000)
(I have a work-in-progress patch which uses this.)

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

include/clang/AST/Type.h
lib/AST/Type.cpp

index beca7088bebf974cf1fce5366112b81da1495610..15c6b6654f68abfe0a92f5496754ffa2b415a144 100644 (file)
@@ -484,6 +484,10 @@ public:
   /// incomplete types.
   bool isConstantSizeType() const;
 
+  /// isSpecifierType - Returns true if this type can be represented by some
+  /// set of type specifiers.
+  bool isSpecifierType() const;
+
   QualType getCanonicalTypeInternal() const { return CanonicalType; }
   void dump() const;
   virtual void getAsStringInternal(std::string &InnerString, const PrintingPolicy &Policy) const = 0;
index 64433cd89b7fd53194fda78b2d68ab0766c36ac3..e63e12b3d66590edba96bded255f3efea05cc30e 100644 (file)
@@ -896,6 +896,19 @@ bool Type::isNullPtrType() const {
   return false;
 }
 
+bool Type::isSpecifierType() const {
+  // Note that this intentionally does not use the canonical type.
+  switch (getTypeClass()) {
+  case Builtin:
+  case Record:
+  case Enum:
+  case Typedef:
+    return true;
+  default:
+    return false;
+  }
+}
+
 const char *BuiltinType::getName(bool CPlusPlus) const {
   switch (getKind()) {
   default: assert(0 && "Unknown builtin type!");
@@ -1144,7 +1157,10 @@ QualType::getAsStringInternal(std::string &S,
     S += "NULL TYPE";
     return;
   }
-  
+
+  if (Policy.SuppressTypeSpecifiers && getTypePtr()->isSpecifierType())
+    return;
+
   // Print qualifiers as appropriate.
   if (unsigned Tq = getCVRQualifiers()) {
     std::string TQS;
@@ -1371,9 +1387,11 @@ void FunctionProtoType::getAsStringInternal(std::string &S, const PrintingPolicy
   
   S += "(";
   std::string Tmp;
+  PrintingPolicy ParamPolicy(Policy);
+  ParamPolicy.SuppressTypeSpecifiers = false;
   for (unsigned i = 0, e = getNumArgs(); i != e; ++i) {
     if (i) S += ", ";
-    getArgType(i).getAsStringInternal(Tmp, Policy);
+    getArgType(i).getAsStringInternal(Tmp, ParamPolicy);
     S += Tmp;
     Tmp.clear();
   }