Sirraide wrote: > > > This is just moving stuff around so that seems fine. Though, I wonder, > > > could we just pass e.g. an `ArrayRef<Decl*>` to `computeEnumBits()`? The > > > LLDB pr you linked seems to have an `SmallVector<EnumConstantDecl*>`, so > > > that should be possible (I think it does require a `reinterpret_cast` > > > from a `const Decl**` to a `const EnumConstantDecl**`, but we already do > > > that in other places in Clang iirc). > > > > > > The reason I suggested the template initially was because in LLDB's case we > > don't have the `EnumConstantDecl`s in a container. We only have an > > `EnumDecl`. So the plan was to pass the `enumerators()` iterator into > > `computeEnumBits`. But if you know of a good way to turn the range into a > > container that we can pass as an `ArrayRef`, or some non-template way of > > passing both an `iterator_range` and `ArrayRef` into `computeEnumBits`, > > that'd be great! > > Yeah, `enumerator()` returns > `llvm::iterator_range<specific_decl_iterator<EnumConstantDecl>>`, and > couldn't find a good way to convert this to an `ArrayRef`. I guess I could > make a `SmallVector<EnumConstantDecl*>` and put the copy of pointers there at > the point of their creation > ([here](https://github.com/llvm/llvm-project/blob/b581ad411d6e178300732410dd8850cd34543ac3/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L2373)), > since the function return a `EnumConstantDecl`, then discard it.
Hmm, I feel like you *might* be able to extract the pointers from the range and do something with those, but I’m not too familiar w/ how that works exactly off the top of my head. I don’t think the template is that big of an issue; it’d be nice not to have it, but if there is no sane/straight-forward way to get around it then I don’t really have a problem w/ it either. https://github.com/llvm/llvm-project/pull/126096 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits