summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2012-01-19 23:54:24 +0000
committerSean Callanan <scallanan@apple.com>2012-01-19 23:54:24 +0000
commit0caa21cb25ae58352e688213a5af604e6dbc3e07 (patch)
tree3f30f299040f84c18844c6a8f01b68a3dd040f62
parent21fa1887e08a134ba36db19db0b6f107e7e17afb (diff)
downloadbcm5719-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.h12
-rw-r--r--lldb/source/Symbol/ClangASTContext.cpp32
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;
}
OpenPOWER on IntegriCloud