]> granicus.if.org Git - clang/commitdiff
add a helper EnumType object for asking about tagtypes for enums.
authorChris Lattner <sabre@nondot.org>
Sun, 6 Apr 2008 21:58:47 +0000 (21:58 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 6 Apr 2008 21:58:47 +0000 (21:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49286 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 7ed12abf48f5704e8e35b5f38260fd6ec21f3407..b143e4cbe9367f5f55e1500d5b2a1405edfca770 100644 (file)
@@ -1001,6 +1001,46 @@ protected:
   friend class Type;
 };
 
+/// RecordType - This is a helper class that allows the use of isa/cast/dyncast
+/// to detect TagType objects of structs/unions/classes.
+class RecordType : public TagType {
+  RecordType(); // DO NOT IMPLEMENT
+public:
+    
+  RecordDecl *getDecl() const {
+    return reinterpret_cast<RecordDecl*>(TagType::getDecl());
+  }
+  
+  // FIXME: This predicate is a helper to QualType/Type. It needs to 
+  // recursively check all fields for const-ness. If any field is declared
+  // const, it needs to return false. 
+  bool hasConstFields() const { return false; }
+
+  // FIXME: RecordType needs to check when it is created that all fields are in
+  // the same address space, and return that.
+  unsigned getAddressSpace() const { return 0; }
+  
+  static bool classof(const Type *T);
+  static bool classof(const RecordType *) { return true; }
+};
+
+/// EnumType - This is a helper class that allows the use of isa/cast/dyncast
+/// to detect TagType objects of enums.
+class EnumType : public TagType {
+  EnumType(); // DO NOT IMPLEMENT
+public:
+    
+  EnumDecl *getDecl() const {
+    return reinterpret_cast<EnumDecl*>(TagType::getDecl());
+  }
+  
+  static bool classof(const Type *T);
+  static bool classof(const EnumType *) { return true; }
+};
+
+
+  
+  
 class ObjCInterfaceType : public Type {
   ObjCInterfaceDecl *Decl;
 protected:
@@ -1094,29 +1134,6 @@ public:
     
 };
   
-/// RecordType - This is a helper class that allows the use of isa/cast/dyncast
-/// to detect TagType objects of structs/unions/classes.
-class RecordType : public TagType {
-  RecordType(); // DO NOT IMPLEMENT
-public:
-    
-  RecordDecl *getDecl() const {
-    return reinterpret_cast<RecordDecl*>(TagType::getDecl());
-  }
-  
-  // FIXME: This predicate is a helper to QualType/Type. It needs to 
-  // recursively check all fields for const-ness. If any field is declared
-  // const, it needs to return false. 
-  bool hasConstFields() const { return false; }
-
-  // FIXME: RecordType needs to check when it is created that all fields are in
-  // the same address space, and return that.
-  unsigned getAddressSpace() const { return 0; }
-  
-  static bool classof(const Type *T);
-  static bool classof(const RecordType *) { return true; }
-};
-
 
 // Inline function definitions.
 
index 40b376bbd90dee694969004ee30d71837f3a39f0..c06b1d9914759d0cd8bd3375b132b304fafee3f1 100644 (file)
@@ -745,6 +745,12 @@ bool RecordType::classof(const Type *T) {
   return false;
 }
 
+bool EnumType::classof(const Type *T) {
+  if (const TagType *TT = dyn_cast<TagType>(T))
+    return isa<EnumDecl>(TT->getDecl());
+  return false;
+}
+
 
 //===----------------------------------------------------------------------===//
 // Type Printing