[cfe-commits] r64820 - in /cfe/trunk: include/clang/AST/Type.h lib/AST/ASTContext.cpp lib/AST/Type.cpp

Fariborz Jahanian fjahanian at apple.com
Tue Feb 17 13:45:36 PST 2009


Author: fjahanian
Date: Tue Feb 17 15:45:36 2009
New Revision: 64820

URL: http://llvm.org/viewvc/llvm-project?rev=64820&view=rev
Log:
Simplified ExtQualType per Chris's feedback.

Modified:
    cfe/trunk/include/clang/AST/Type.h
    cfe/trunk/lib/AST/ASTContext.cpp
    cfe/trunk/lib/AST/Type.cpp

Modified: cfe/trunk/include/clang/AST/Type.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=64820&r1=64819&r2=64820&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/Type.h (original)
+++ cfe/trunk/include/clang/AST/Type.h Tue Feb 17 15:45:36 2009
@@ -462,55 +462,43 @@
 ///
 class ExtQualType : public Type, public llvm::FoldingSetNode {
 public:
-  enum EQT {
-    EXTNONE = 0x0,
-    ASQUAL  = 0x01,
-    GCQUAL  = 0x10
+  enum GCAttrTypes {
+    GCNone = 0,
+    Weak,
+    Strong
   };
+  
 private:
   /// BaseType - This is the underlying type that this qualifies.  All CVR
   /// qualifiers are stored on the QualType that references this type, so we
   /// can't have any here.
   Type *BaseType;
-  unsigned ExtQualTypeKind : 2;
 
   /// Address Space ID - The address space ID this type is qualified with.
   unsigned AddressSpace;
   /// GC __weak/__strong attributes
-  ObjCGCAttr *GCAttr;
+  GCAttrTypes GCAttrType;
   
   ExtQualType(Type *Base, QualType CanonicalPtr, unsigned AddrSpace,
-              ObjCGCAttr *gcAttr,
-              unsigned ExtKind) :
+              GCAttrTypes gcAttr) :
     Type(ExtQual, CanonicalPtr, Base->isDependentType()), BaseType(Base),
-    ExtQualTypeKind(ExtKind), AddressSpace(0), GCAttr(0) {
-      if (ExtKind & ASQUAL)
-        AddressSpace = AddrSpace;
-      if (ExtKind & GCQUAL)
-        GCAttr = gcAttr;
-  }
+    AddressSpace(AddrSpace), GCAttrType(gcAttr) { }
   friend class ASTContext;  // ASTContext creates these.
 public:
   Type *getBaseType() const { return BaseType; }
-  ObjCGCAttr *getGCAttr() const {
-    assert((ExtQualTypeKind & GCQUAL) && "Bad ExtQualType Kind - not GCQUAL");
-    return GCAttr; 
-  }
-  unsigned getAddressSpace() const {
-    assert((ExtQualTypeKind & ASQUAL) && "Bad ExtQualType Kind - not ASQUAL");
-    return AddressSpace; 
-  }
+  GCAttrTypes getType() const { return GCAttrType; }
+  unsigned getAddressSpace() const { return AddressSpace; }
   
   virtual void getAsStringInternal(std::string &InnerString) const;
   
   void Profile(llvm::FoldingSetNodeID &ID) {
-    Profile(ID, getBaseType(), AddressSpace, GCAttr);
+    Profile(ID, getBaseType(), AddressSpace, GCAttrType);
   }
   static void Profile(llvm::FoldingSetNodeID &ID, Type *Base, 
-                      unsigned AddrSpace, ObjCGCAttr *gcAttr) {
+                      unsigned AddrSpace, GCAttrTypes gcAttr) {
     ID.AddPointer(Base);
-    ID.AddPointer(gcAttr);
     ID.AddInteger(AddrSpace);
+    ID.AddInteger(gcAttr);
   }
   
   static bool classof(const Type *T) { return T->getTypeClass() == ExtQual; }

Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=64820&r1=64819&r2=64820&view=diff

==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Tue Feb 17 15:45:36 2009
@@ -725,7 +725,7 @@
   // Check if we've already instantiated an address space qual'd type of this
   // type.
   llvm::FoldingSetNodeID ID;
-  ExtQualType::Profile(ID, T.getTypePtr(), AddressSpace, 0);      
+  ExtQualType::Profile(ID, T.getTypePtr(), AddressSpace, ExtQualType::GCNone);      
   void *InsertPos = 0;
   if (ExtQualType *EXTQy = ExtQualTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(EXTQy, 0);
@@ -741,8 +741,7 @@
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
   }
   ExtQualType *New = new (*this, 8) ExtQualType(T.getTypePtr(), Canonical, 
-                                                AddressSpace, 0, 
-                                                ExtQualType::ASQUAL);
+                                                AddressSpace, ExtQualType::GCNone);
   ExtQualTypes.InsertNode(New, InsertPos);
   Types.push_back(New);
   return QualType(New, T.getCVRQualifiers());

Modified: cfe/trunk/lib/AST/Type.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=64820&r1=64819&r2=64820&view=diff

==============================================================================
--- cfe/trunk/lib/AST/Type.cpp (original)
+++ cfe/trunk/lib/AST/Type.cpp Tue Feb 17 15:45:36 2009
@@ -1054,17 +1054,15 @@
 
 void ExtQualType::getAsStringInternal(std::string &S) const {
   bool space = false;
-  if (ExtQualTypeKind & ASQUAL) {
+  if (AddressSpace) {
     S = "__attribute__((address_space("+llvm::utostr_32(AddressSpace)+")))" + S;
     space = true;
   }
-  if (ExtQualTypeKind & GCQUAL) {
+  if (GCAttrType != GCNone) {
     if (space)
       S += ' ';
     S += "__attribute__((objc_gc(";
-    ObjCGCAttr *gcattr = getGCAttr();
-    ObjCGCAttr::GCAttrTypes attr = gcattr->getType();
-    if (attr & ObjCGCAttr::Weak)
+    if (GCAttrType == Weak)
       S += "weak";
     else
       S += "strong";





More information about the cfe-commits mailing list