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
This commit is contained in:
parent
21fa1887e0
commit
0caa21cb25
|
@ -782,8 +782,18 @@ public:
|
||||||
static bool
|
static bool
|
||||||
IsFunctionPointerType (lldb::clang_type_t clang_type);
|
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
|
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
|
// Typedefs
|
||||||
|
|
|
@ -5537,7 +5537,9 @@ ClangASTContext::IsPointerToScalarType (lldb::clang_type_t clang_type)
|
||||||
bool
|
bool
|
||||||
ClangASTContext::IsArrayOfScalarType (lldb::clang_type_t clang_type)
|
ClangASTContext::IsArrayOfScalarType (lldb::clang_type_t clang_type)
|
||||||
{
|
{
|
||||||
if (!IsArrayType(clang_type))
|
clang_type = GetAsArrayType(clang_type);
|
||||||
|
|
||||||
|
if (clang_type == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QualType qual_type (QualType::getFromOpaquePtr(clang_type));
|
QualType qual_type (QualType::getFromOpaquePtr(clang_type));
|
||||||
|
@ -5708,11 +5710,11 @@ ClangASTContext::GetArraySize (clang_type_t clang_type)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
clang_type_t
|
||||||
ClangASTContext::IsArrayType (clang_type_t clang_type, clang_type_t*member_type, uint64_t *size)
|
ClangASTContext::GetAsArrayType (clang_type_t clang_type, clang_type_t*member_type, uint64_t *size)
|
||||||
{
|
{
|
||||||
if (!clang_type)
|
if (!clang_type)
|
||||||
return false;
|
return 0;
|
||||||
|
|
||||||
QualType qual_type (QualType::getFromOpaquePtr(clang_type));
|
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();
|
*member_type = cast<ConstantArrayType>(qual_type)->getElementType().getAsOpaquePtr();
|
||||||
if (size)
|
if (size)
|
||||||
*size = cast<ConstantArrayType>(qual_type)->getSize().getLimitedValue(ULLONG_MAX);
|
*size = cast<ConstantArrayType>(qual_type)->getSize().getLimitedValue(ULLONG_MAX);
|
||||||
return true;
|
return clang_type;
|
||||||
|
|
||||||
case clang::Type::IncompleteArray:
|
case clang::Type::IncompleteArray:
|
||||||
if (member_type)
|
if (member_type)
|
||||||
*member_type = cast<IncompleteArrayType>(qual_type)->getElementType().getAsOpaquePtr();
|
*member_type = cast<IncompleteArrayType>(qual_type)->getElementType().getAsOpaquePtr();
|
||||||
if (size)
|
if (size)
|
||||||
*size = 0;
|
*size = 0;
|
||||||
return true;
|
return clang_type;
|
||||||
|
|
||||||
case clang::Type::VariableArray:
|
case clang::Type::VariableArray:
|
||||||
if (member_type)
|
if (member_type)
|
||||||
*member_type = cast<VariableArrayType>(qual_type)->getElementType().getAsOpaquePtr();
|
*member_type = cast<VariableArrayType>(qual_type)->getElementType().getAsOpaquePtr();
|
||||||
if (size)
|
if (size)
|
||||||
*size = 0;
|
*size = 0;
|
||||||
return true;
|
return clang_type;
|
||||||
|
|
||||||
case clang::Type::DependentSizedArray:
|
case clang::Type::DependentSizedArray:
|
||||||
if (member_type)
|
if (member_type)
|
||||||
*member_type = cast<DependentSizedArrayType>(qual_type)->getElementType().getAsOpaquePtr();
|
*member_type = cast<DependentSizedArrayType>(qual_type)->getElementType().getAsOpaquePtr();
|
||||||
if (size)
|
if (size)
|
||||||
*size = 0;
|
*size = 0;
|
||||||
return true;
|
return clang_type;
|
||||||
|
|
||||||
case clang::Type::Typedef:
|
case clang::Type::Typedef:
|
||||||
return ClangASTContext::IsArrayType (cast<TypedefType>(qual_type)->getDecl()->getUnderlyingType().getAsOpaquePtr(),
|
return ClangASTContext::GetAsArrayType (cast<TypedefType>(qual_type)->getDecl()->getUnderlyingType().getAsOpaquePtr(),
|
||||||
member_type,
|
member_type,
|
||||||
size);
|
size);
|
||||||
|
|
||||||
case clang::Type::Elaborated:
|
case clang::Type::Elaborated:
|
||||||
return ClangASTContext::IsArrayType (cast<ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr(),
|
return ClangASTContext::GetAsArrayType (cast<ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr(),
|
||||||
member_type,
|
member_type,
|
||||||
size);
|
size);
|
||||||
}
|
}
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue