================
@@ -208,21 +320,47 @@ SymbolTags computeSymbolTags(const NamedDecl &ND) {
return Result;
}
+std::vector<SymbolTag> expandTagBitmask(const SymbolTags STGS) {
+ std::vector<SymbolTag> Tags;
+
+ if (STGS == 0)
+ return Tags;
+
+ // No filtering required since this function is only used for Symbols from
the
+ // index, which have already been filtered in getSymbolTags(const NamedDecl
+ // &ND).
+
+ // Iterate through SymbolTag enum values and collect any that are present in
+ // the bitmask. SymbolTag values are in the numeric range
+ // [FirstTag .. LastTag].
+ constexpr unsigned MinTag = static_cast<unsigned>(SymbolTag::FirstTag);
+ constexpr unsigned MaxTag = static_cast<unsigned>(SymbolTag::LastTag);
+ for (unsigned I = MinTag; I <= MaxTag; ++I) {
+ auto ST = static_cast<SymbolTag>(I);
+ if (STGS & toSymbolTagBitmask(ST))
+ Tags.push_back(ST);
+ }
+ return Tags;
+}
+
std::vector<SymbolTag> getSymbolTags(const NamedDecl &ND) {
const auto symbolTags = computeSymbolTags(ND);
std::vector<SymbolTag> Tags;
if (symbolTags == 0)
return Tags;
+ // Apply specific filter to the symbol tags.
+ const auto filteredTags = filterSymbolTags(ND, symbolTags);
----------------
ratzdi wrote:
done.
https://github.com/llvm/llvm-project/pull/170103
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits