[NFC][SpecialCaseList] Hide Section internals in private section (#167276)
Preparing to moving most of implementation out of the header file. * https://github.com/llvm/llvm-project/pull/167280 --------- Co-authored-by: Naveen Seth Hanig <naveen.hanig@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
parent
17e26411f8
commit
a37c4e0fad
@ -534,7 +534,7 @@ WarningsSpecialCaseList::create(const llvm::MemoryBuffer &Input,
|
||||
void WarningsSpecialCaseList::processSections(DiagnosticsEngine &Diags) {
|
||||
static constexpr auto WarningFlavor = clang::diag::Flavor::WarningOrError;
|
||||
for (const auto &SectionEntry : sections()) {
|
||||
StringRef DiagGroup = SectionEntry.SectionStr;
|
||||
StringRef DiagGroup = SectionEntry.name();
|
||||
if (DiagGroup == "*") {
|
||||
// Drop the default section introduced by special case list, we only
|
||||
// support exact diagnostic group names.
|
||||
|
||||
@ -36,7 +36,7 @@ public:
|
||||
|
||||
bool hasPrefix(StringRef Prefix) const {
|
||||
for (const auto &It : sections())
|
||||
if (It.Entries.count(Prefix) > 0)
|
||||
if (It.hasPrefix(Prefix))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -42,7 +42,7 @@ void SanitizerSpecialCaseList::createSanitizerSections() {
|
||||
SanitizerMask Mask;
|
||||
|
||||
#define SANITIZER(NAME, ID) \
|
||||
if (S.SectionMatcher.matchAny(NAME)) \
|
||||
if (S.matchName(NAME)) \
|
||||
Mask |= SanitizerKind::ID;
|
||||
#define SANITIZER_GROUP(NAME, ID, ALIAS) SANITIZER(NAME, ID)
|
||||
|
||||
@ -68,7 +68,7 @@ SanitizerSpecialCaseList::inSectionBlame(SanitizerMask Mask, StringRef Prefix,
|
||||
if (S.Mask & Mask) {
|
||||
unsigned LineNum = S.S.getLastMatch(Prefix, Query, Category);
|
||||
if (LineNum > 0)
|
||||
return {S.S.FileIdx, LineNum};
|
||||
return {S.S.fileIndex(), LineNum};
|
||||
}
|
||||
}
|
||||
return NotFound;
|
||||
|
||||
@ -201,17 +201,22 @@ private:
|
||||
using SectionEntries = StringMap<StringMap<Matcher>>;
|
||||
|
||||
protected:
|
||||
struct Section {
|
||||
class Section {
|
||||
public:
|
||||
Section(StringRef Str, unsigned FileIdx, bool UseGlobs)
|
||||
: SectionMatcher(UseGlobs, /*RemoveDotSlash=*/false), SectionStr(Str),
|
||||
FileIdx(FileIdx) {}
|
||||
|
||||
Section(Section &&) = default;
|
||||
|
||||
Matcher SectionMatcher;
|
||||
SectionEntries Entries;
|
||||
std::string SectionStr;
|
||||
unsigned FileIdx;
|
||||
// Return name of the section, its entire string in [].
|
||||
StringRef name() const { return SectionStr; }
|
||||
|
||||
// Returns true if string 'Name' matches section name interpreted as a glob.
|
||||
LLVM_ABI bool matchName(StringRef Name) const;
|
||||
|
||||
// Return sequence number of the file where this section is defined.
|
||||
unsigned fileIndex() const { return FileIdx; }
|
||||
|
||||
// Helper method to search by Prefix, Query, and Category. Returns
|
||||
// 1-based line number on which rule is defined, or 0 if there is no match.
|
||||
@ -223,11 +228,19 @@ protected:
|
||||
LLVM_ABI StringRef getLongestMatch(StringRef Prefix, StringRef Query,
|
||||
StringRef Category) const;
|
||||
|
||||
/// Returns true if the section has any entries for the given prefix.
|
||||
LLVM_ABI bool hasPrefix(StringRef Prefix) const;
|
||||
|
||||
private:
|
||||
friend class SpecialCaseList;
|
||||
LLVM_ABI void preprocess(bool OrderBySize);
|
||||
LLVM_ABI const SpecialCaseList::Matcher *
|
||||
findMatcher(StringRef Prefix, StringRef Category) const;
|
||||
|
||||
Matcher SectionMatcher;
|
||||
std::string SectionStr;
|
||||
SectionEntries Entries;
|
||||
unsigned FileIdx;
|
||||
};
|
||||
|
||||
ArrayRef<const Section> sections() const { return Sections; }
|
||||
|
||||
@ -348,6 +348,10 @@ SpecialCaseList::inSectionBlame(StringRef Section, StringRef Prefix,
|
||||
return NotFound;
|
||||
}
|
||||
|
||||
bool SpecialCaseList::Section::matchName(StringRef Name) const {
|
||||
return SectionMatcher.matchAny(Name);
|
||||
}
|
||||
|
||||
const SpecialCaseList::Matcher *
|
||||
SpecialCaseList::Section::findMatcher(StringRef Prefix,
|
||||
StringRef Category) const {
|
||||
@ -393,4 +397,8 @@ StringRef SpecialCaseList::Section::getLongestMatch(StringRef Prefix,
|
||||
return LongestRule;
|
||||
}
|
||||
|
||||
bool SpecialCaseList::Section::hasPrefix(StringRef Prefix) const {
|
||||
return Entries.find(Prefix) != Entries.end();
|
||||
}
|
||||
|
||||
} // namespace llvm
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user