]> granicus.if.org Git - clang/commitdiff
Support getTypeInfo, getTypeAlign, getTypeSize on const Type*s.
authorDaniel Dunbar <daniel@zuster.org>
Sat, 8 Nov 2008 05:48:37 +0000 (05:48 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 8 Nov 2008 05:48:37 +0000 (05:48 +0000)
 - Size/align are not effected by CVR qualifiers.

Support getCanonicalType: const Type* -> const Type*.

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

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

index 4f30e82ec4e4c51b5491663fc32ec0c07715ea30..b5adffdcb0bc56b406f2a9f05440eca1f948c72a 100644 (file)
@@ -343,19 +343,28 @@ public:
   
   /// getTypeInfo - Get the size and alignment of the specified complete type in
   /// bits.
-  std::pair<uint64_t, unsigned> getTypeInfo(QualType T);
+  std::pair<uint64_t, unsigned> getTypeInfo(const Type *T);
+  std::pair<uint64_t, unsigned> getTypeInfo(QualType T) {
+    return getTypeInfo(T.getTypePtr());
+  }
   
   /// getTypeSize - Return the size of the specified type, in bits.  This method
   /// does not work on incomplete types.
   uint64_t getTypeSize(QualType T) {
     return getTypeInfo(T).first;
   }
+  uint64_t getTypeSize(const Type *T) {
+    return getTypeInfo(T).first;
+  }
   
   /// getTypeAlign - Return the alignment of the specified type, in bits.  This
   /// method does not work on incomplete types.
   unsigned getTypeAlign(QualType T) {
     return getTypeInfo(T).second;
   }
+  unsigned getTypeAlign(const Type *T) {
+    return getTypeInfo(T).second;
+  }
   
   /// getASTRecordLayout - Get or compute information about the layout of the
   /// specified record (struct/union/class), which indicates its size and field
@@ -374,6 +383,9 @@ public:
   /// to be free of any of these, allowing two canonical types to be compared
   /// for exact equality with a simple pointer comparison.
   QualType getCanonicalType(QualType T);
+  const Type *getCanonicalType(const Type *T) {
+    return T->getCanonicalTypeInternal().getTypePtr();
+  }
   
   /// Type Query functions.  If the type is an instance of the specified class,
   /// return the Type pointer for the underlying maximally pretty type.  This
index 1aea5b5c69860949ec4aebfe61b8414430fc69b5..52abf43a0e6dd4dd855b2ad94f7a5495ba44e1cf 100644 (file)
@@ -223,7 +223,7 @@ const llvm::fltSemantics &ASTContext::getFloatTypeSemantics(QualType T) const {
 /// getTypeSize - Return the size of the specified type, in bits.  This method
 /// does not work on incomplete types.
 std::pair<uint64_t, unsigned>
-ASTContext::getTypeInfo(QualType T) {
+ASTContext::getTypeInfo(const Type *T) {
   T = getCanonicalType(T);
   uint64_t Width;
   unsigned Align;
@@ -236,7 +236,7 @@ ASTContext::getTypeInfo(QualType T) {
   case Type::VariableArray:
     assert(0 && "VLAs not implemented yet!");
   case Type::ConstantArray: {
-    ConstantArrayType *CAT = cast<ConstantArrayType>(T);
+    const ConstantArrayType *CAT = cast<ConstantArrayType>(T);
     
     std::pair<uint64_t, unsigned> EltInfo = getTypeInfo(CAT->getElementType());
     Width = EltInfo.first*CAT->getSize().getZExtValue();
@@ -344,23 +344,25 @@ ASTContext::getTypeInfo(QualType T) {
     break;
   }
   case Type::ObjCInterface: {
-    ObjCInterfaceType *ObjCI = cast<ObjCInterfaceType>(T);
+    const ObjCInterfaceType *ObjCI = cast<ObjCInterfaceType>(T);
     const ASTRecordLayout &Layout = getASTObjCInterfaceLayout(ObjCI->getDecl());
     Width = Layout.getSize();
     Align = Layout.getAlignment();
     break;
   }
   case Type::Tagged: {
-    if (cast<TagType>(T)->getDecl()->isInvalidDecl()) {
+    const TagType *TT = cast<TagType>(T);
+
+    if (TT->getDecl()->isInvalidDecl()) {
       Width = 1;
       Align = 1;
       break;
     }
     
-    if (EnumType *ET = dyn_cast<EnumType>(cast<TagType>(T)))
+    if (const EnumType *ET = dyn_cast<EnumType>(TT))
       return getTypeInfo(ET->getDecl()->getIntegerType());
 
-    RecordType *RT = cast<RecordType>(T);
+    const RecordType *RT = cast<RecordType>(TT);
     const ASTRecordLayout &Layout = getASTRecordLayout(RT->getDecl());
     Width = Layout.getSize();
     Align = Layout.getAlignment();