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 lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits