diff options
| author | Sean Callanan <scallanan@apple.com> | 2012-01-19 23:54:24 +0000 |
|---|---|---|
| committer | Sean Callanan <scallanan@apple.com> | 2012-01-19 23:54:24 +0000 |
| commit | 0caa21cb25ae58352e688213a5af604e6dbc3e07 (patch) | |
| tree | 3f30f299040f84c18844c6a8f01b68a3dd040f62 | |
| parent | 21fa1887e08a134ba36db19db0b6f107e7e17afb (diff) | |
| download | bcm5719-llvm-0caa21cb25ae58352e688213a5af604e6dbc3e07.tar.gz bcm5719-llvm-0caa21cb25ae58352e688213a5af604e6dbc3e07.zip | |
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.
llvm-svn: 148512
| -rw-r--r-- | lldb/include/lldb/Symbol/ClangASTContext.h | 12 | ||||
| -rw-r--r-- | lldb/source/Symbol/ClangASTContext.cpp | 32 |
2 files changed, 28 insertions, 16 deletions
diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h index 3c9fd0987f3..53cdb591bec 100644 --- a/lldb/include/lldb/Symbol/ClangASTContext.h +++ b/lldb/include/lldb/Symbol/ClangASTContext.h @@ -782,8 +782,18 @@ public: 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 diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index a477a6f6ffb..d07df717992 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -5537,7 +5537,9 @@ ClangASTContext::IsPointerToScalarType (lldb::clang_type_t clang_type) 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 @@ ClangASTContext::GetArraySize (clang_type_t clang_type) 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 @@ ClangASTContext::IsArrayType (clang_type_t clang_type, clang_type_t*member_type, *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; } |

