[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