1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[Support] Add GlobPattern::isTrivialMatchAll()

GlobPattern::isTrivialMatchAll() returns true for the GlobPattern "*"
which will match all inputs.

This can be used to avoid performing expensive preparation of the input
for match() when the result of the match will always be true.

Differential Revision: https://reviews.llvm.org/D87468
This commit is contained in:
Andrew Ng 2020-09-07 13:22:12 +01:00
parent 314b01deec
commit dc5cf0feeb
2 changed files with 23 additions and 0 deletions

View File

@ -31,6 +31,16 @@ public:
static Expected<GlobPattern> create(StringRef Pat); static Expected<GlobPattern> create(StringRef Pat);
bool match(StringRef S) const; bool match(StringRef S) const;
// Returns true for glob pattern "*". Can be used to avoid expensive
// preparation/acquisition of the input for match().
bool isTrivialMatchAll() const {
if (Prefix && Prefix->empty()) {
assert(!Suffix);
return true;
}
return false;
}
private: private:
bool matchOne(ArrayRef<BitVector> Pat, StringRef S) const; bool matchOne(ArrayRef<BitVector> Pat, StringRef S) const;

View File

@ -133,4 +133,17 @@ TEST_F(GlobPatternTest, ExtSym) {
EXPECT_TRUE((bool)Pat2); EXPECT_TRUE((bool)Pat2);
EXPECT_TRUE(Pat2->match("\xFF")); EXPECT_TRUE(Pat2->match("\xFF"));
} }
TEST_F(GlobPatternTest, IsTrivialMatchAll) {
Expected<GlobPattern> Pat1 = GlobPattern::create("*");
EXPECT_TRUE((bool)Pat1);
EXPECT_TRUE(Pat1->isTrivialMatchAll());
const char *NegativeCases[] = {"a*", "*a", "?*", "*?", "**", "\\*"};
for (auto *P : NegativeCases) {
Expected<GlobPattern> Pat2 = GlobPattern::create(P);
EXPECT_TRUE((bool)Pat2);
EXPECT_FALSE(Pat2->isTrivialMatchAll());
}
}
} }