Endill added a comment.
I tested this patch together with the following new code:
uint32_t TypeSystemClang::GetNumMemberEnums(lldb::opaque_compiler_type_t
type) {
using EnumIt = clang::DeclContext::specific_decl_iterator<clang::EnumDecl>;
if (!type)
return 0;
clang::QualType qual_type = RemoveWrappingTypes(GetCanonicalQualType(type));
clang::DeclContext *ctx = qual_type->getAsRecordDecl()->getDeclContext();
return std::distance(EnumIt(ctx->decls_begin()), EnumIt(ctx->decls_end()));
}
CompilerType
TypeSystemClang::GetMemberEnumAtIndex(lldb::opaque_compiler_type_t type,
size_t index) {
using EnumIt = clang::DeclContext::specific_decl_iterator<clang::EnumDecl>;
if (!type)
return CompilerType();
clang::QualType qual_type = RemoveWrappingTypes(GetCanonicalQualType(type));
clang::DeclContext *ctx = qual_type->getAsRecordDecl()->getDeclContext();
size_t enum_index = 0;
for (EnumIt enums_it(ctx->decls_begin()), enums_end(ctx->decls_end());
enums_it != enums_end;
++enums_it, ++enum_index) {
if (enum_index == index) {
return CompilerType(weak_from_this(), *enums_it);
}
}
}
I created all the wrappers to make it available in Python. The result was
unsatisfactory: this code doesn't even trigger
`DWARFASTParserClang::ParseChildMembers` that this patch touches, and return 0
instead of 1. This doesn't change even if I trigger `ParseChildMembers` via
other means before asking for a number of member enums in a type.
Code I tested this on:
using intptr_t = long;
using uintptr_t = unsigned long;
struct PointerIntPairInfo {
enum MaskAndShiftConstants : uintptr_t {
PointerBitMask =
~(uintptr_t)(((intptr_t)1 << 3) - 1),
};
int a{};
};
static uintptr_t dummy() {
return PointerIntPairInfo::PointerBitMask;
}
int main()
{
PointerIntPairInfo p;
__builtin_debugtrap();
return p.a + foo();
}
If you have any suggestions what I missed or did wrong, please let me know.
I'll continue with this patch nevertheless, but it's clear now that there's
still a way to go until I can access that enum without going through slow
expression evaluator.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156774/new/
https://reviews.llvm.org/D156774
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits