[Lldb-commits] [lldb] r148512 - in /lldb/trunk: include/lldb/Symbol/ClangASTContext.h source/Symbol/ClangASTContext.cpp

Sean Callanan scallanan at apple.com
Thu Jan 19 15:54:24 PST 2012


Author: spyffe
Date: Thu Jan 19 17:54:24 2012
New Revision: 148512

URL: http://llvm.org/viewvc/llvm-project?rev=148512&view=rev
Log:
Made IsArrayOfScalarType handle typedefs correctly.

We should ultimately introduce GetAs...Type
functions in all cases where we have Is...Type
functions that know how to look inside typedefs.

Modified:
    lldb/trunk/include/lldb/Symbol/ClangASTContext.h
    lldb/trunk/source/Symbol/ClangASTContext.cpp

Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=148512&r1=148511&r2=148512&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)
+++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Thu Jan 19 17:54:24 2012
@@ -782,8 +782,18 @@
     static bool
     IsFunctionPointerType (lldb::clang_type_t clang_type);
     
+    static lldb::clang_type_t
+    GetAsArrayType (lldb::clang_type_t clang_type, 
+                    lldb::clang_type_t *member_type = NULL, 
+                    uint64_t *size = NULL);
+    
     static bool
-    IsArrayType (lldb::clang_type_t clang_type, lldb::clang_type_t *member_type = NULL, uint64_t *size = NULL);
+    IsArrayType (lldb::clang_type_t clang_type,
+                 lldb::clang_type_t *member_type = NULL,
+                 uint64_t *size = NULL)
+    {
+        return GetAsArrayType(clang_type, member_type, size) != 0;
+    }
 
     //------------------------------------------------------------------
     // Typedefs

Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=148512&r1=148511&r2=148512&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp Thu Jan 19 17:54:24 2012
@@ -5537,7 +5537,9 @@
 bool
 ClangASTContext::IsArrayOfScalarType (lldb::clang_type_t clang_type)
 {
-    if (!IsArrayType(clang_type))
+    clang_type = GetAsArrayType(clang_type);
+    
+    if (clang_type == 0)
         return false;
     
     QualType qual_type (QualType::getFromOpaquePtr(clang_type));
@@ -5708,11 +5710,11 @@
     return 0;
 }
 
-bool
-ClangASTContext::IsArrayType (clang_type_t clang_type, clang_type_t*member_type, uint64_t *size)
+clang_type_t
+ClangASTContext::GetAsArrayType (clang_type_t clang_type, clang_type_t*member_type, uint64_t *size)
 {
     if (!clang_type)
-        return false;
+        return 0;
     
     QualType qual_type (QualType::getFromOpaquePtr(clang_type));
     
@@ -5727,40 +5729,40 @@
             *member_type = cast<ConstantArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)
             *size = cast<ConstantArrayType>(qual_type)->getSize().getLimitedValue(ULLONG_MAX);
-        return true;
+        return clang_type;
 
     case clang::Type::IncompleteArray:
         if (member_type)
             *member_type = cast<IncompleteArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)
             *size = 0;
-        return true;
+        return clang_type;
 
     case clang::Type::VariableArray:
         if (member_type)
             *member_type = cast<VariableArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)
             *size = 0;
-        return true;
+        return clang_type;
 
     case clang::Type::DependentSizedArray:
         if (member_type)
             *member_type = cast<DependentSizedArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)
             *size = 0;
-        return true;
+        return clang_type;
     
     case clang::Type::Typedef:
-        return ClangASTContext::IsArrayType (cast<TypedefType>(qual_type)->getDecl()->getUnderlyingType().getAsOpaquePtr(),
-                                             member_type, 
-                                             size);
+        return ClangASTContext::GetAsArrayType (cast<TypedefType>(qual_type)->getDecl()->getUnderlyingType().getAsOpaquePtr(),
+                                                member_type, 
+                                                size);
     
     case clang::Type::Elaborated:
-        return ClangASTContext::IsArrayType (cast<ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr(),
-                                             member_type,
-                                             size);
+        return ClangASTContext::GetAsArrayType (cast<ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr(),
+                                                member_type,
+                                                size);
     }
-    return false;
+    return 0;
 }
 
 





More information about the lldb-commits mailing list