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:
parent
314b01deec
commit
dc5cf0feeb
@ -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…
x
Reference in New Issue
Block a user