forked from OSchip/llvm-project
[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:
parent
3a0a2a6347
commit
6040e2a6d9
|
@ -31,6 +31,16 @@ public:
|
|||
static Expected<GlobPattern> create(StringRef Pat);
|
||||
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:
|
||||
bool matchOne(ArrayRef<BitVector> Pat, StringRef S) const;
|
||||
|
||||
|
|
|
@ -133,4 +133,17 @@ TEST_F(GlobPatternTest, ExtSym) {
|
|||
EXPECT_TRUE((bool)Pat2);
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue