[ELF] findAllByVersion: optimize a find('@') with hasVersionSuffix. NFC

This commit is contained in:
Fangrui Song 2023-05-25 21:23:23 -07:00
parent bb9a0c736b
commit 40eb8a7864

View File

@ -171,10 +171,11 @@ SmallVector<Symbol *, 0> SymbolTable::findAllByVersion(SymbolVersion ver,
bool includeNonDefault) {
SmallVector<Symbol *, 0> res;
SingleStringMatcher m(ver.name);
auto check = [&](StringRef name) {
size_t pos = name.find('@');
auto check = [&](const Symbol &sym) -> bool {
if (!includeNonDefault)
return pos == StringRef::npos;
return !sym.hasVersionSuffix;
StringRef name = sym.getName();
size_t pos = name.find('@');
return !(pos + 1 < name.size() && name[pos + 1] == '@');
};
@ -182,14 +183,13 @@ SmallVector<Symbol *, 0> SymbolTable::findAllByVersion(SymbolVersion ver,
for (auto &p : getDemangledSyms())
if (m.match(p.first()))
for (Symbol *sym : p.second)
if (check(sym->getName()))
if (check(*sym))
res.push_back(sym);
return res;
}
for (Symbol *sym : symVector)
if (canBeVersioned(*sym) && check(sym->getName()) &&
m.match(sym->getName()))
if (canBeVersioned(*sym) && check(*sym) && m.match(sym->getName()))
res.push_back(sym);
return res;
}