mirror of https://github.com/KLayout/klayout.git
Bugfix for glob pattern with empty alternative.
This commit is contained in:
parent
991778f718
commit
a3b2e3a154
|
|
@ -238,6 +238,38 @@ private:
|
||||||
GlobPatternString &operator= (const GlobPatternString &);
|
GlobPatternString &operator= (const GlobPatternString &);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GlobPatternEmpty
|
||||||
|
: public GlobPatternOp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GlobPatternEmpty ()
|
||||||
|
: GlobPatternOp ()
|
||||||
|
{
|
||||||
|
// .. nothing yet ..
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual GlobPatternOp *clone () const
|
||||||
|
{
|
||||||
|
GlobPatternEmpty *op = new GlobPatternEmpty ();
|
||||||
|
init_clone (op);
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool is_const () const
|
||||||
|
{
|
||||||
|
return next () == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool match (const char *s, std::vector<std::string> *e) const
|
||||||
|
{
|
||||||
|
return GlobPatternOp::match (s, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
GlobPatternEmpty (const GlobPatternEmpty &);
|
||||||
|
GlobPatternEmpty &operator= (const GlobPatternString &);
|
||||||
|
};
|
||||||
|
|
||||||
class GlobPatternPass
|
class GlobPatternPass
|
||||||
: public GlobPatternOp
|
: public GlobPatternOp
|
||||||
{
|
{
|
||||||
|
|
@ -602,6 +634,8 @@ compile_emit_alt (GlobPatternOp *&op_head, GlobPatternOp *&op, const char *&p, b
|
||||||
GlobPatternOp *alt = compile (p, false, cs, false, true);
|
GlobPatternOp *alt = compile (p, false, cs, false, true);
|
||||||
if (alt) {
|
if (alt) {
|
||||||
alt_op->add_choice (alt);
|
alt_op->add_choice (alt);
|
||||||
|
} else {
|
||||||
|
alt_op->add_choice (new GlobPatternEmpty ());
|
||||||
}
|
}
|
||||||
if (*p == ',') {
|
if (*p == ',') {
|
||||||
++p;
|
++p;
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,7 @@ TEST(6)
|
||||||
|
|
||||||
EXPECT_EQ (a.match ("abcg"), true);
|
EXPECT_EQ (a.match ("abcg"), true);
|
||||||
EXPECT_EQ (a.match ("adg"), true);
|
EXPECT_EQ (a.match ("adg"), true);
|
||||||
|
EXPECT_EQ (a.match ("ad"), false);
|
||||||
EXPECT_EQ (a.match ("ag"), false);
|
EXPECT_EQ (a.match ("ag"), false);
|
||||||
EXPECT_EQ (a.match ("abch"), false);
|
EXPECT_EQ (a.match ("abch"), false);
|
||||||
EXPECT_EQ (a.match ("adh"), false);
|
EXPECT_EQ (a.match ("adh"), false);
|
||||||
|
|
@ -173,11 +174,33 @@ TEST(6)
|
||||||
|
|
||||||
EXPECT_EQ (aa.match ("abcg"), true);
|
EXPECT_EQ (aa.match ("abcg"), true);
|
||||||
EXPECT_EQ (aa.match ("adg"), true);
|
EXPECT_EQ (aa.match ("adg"), true);
|
||||||
|
EXPECT_EQ (aa.match ("ad"), false);
|
||||||
EXPECT_EQ (aa.match ("ag"), false);
|
EXPECT_EQ (aa.match ("ag"), false);
|
||||||
EXPECT_EQ (aa.match ("abch"), false);
|
EXPECT_EQ (aa.match ("abch"), false);
|
||||||
EXPECT_EQ (aa.match ("adh"), false);
|
EXPECT_EQ (aa.match ("adh"), false);
|
||||||
EXPECT_EQ (aa.match ("ah"), false);
|
EXPECT_EQ (aa.match ("ah"), false);
|
||||||
|
|
||||||
|
a = tl::GlobPattern ("a{,d}g");
|
||||||
|
|
||||||
|
EXPECT_EQ (a.match ("abcg"), false);
|
||||||
|
EXPECT_EQ (a.match ("ad"), false);
|
||||||
|
EXPECT_EQ (a.match ("adg"), true);
|
||||||
|
EXPECT_EQ (a.match ("ag"), true);
|
||||||
|
EXPECT_EQ (a.match ("a"), false);
|
||||||
|
EXPECT_EQ (a.match ("abch"), false);
|
||||||
|
EXPECT_EQ (a.match ("adh"), false);
|
||||||
|
EXPECT_EQ (a.match ("ah"), false);
|
||||||
|
|
||||||
|
a = tl::GlobPattern ("a{,d}");
|
||||||
|
|
||||||
|
EXPECT_EQ (a.match ("abcg"), false);
|
||||||
|
EXPECT_EQ (a.match ("ad"), true);
|
||||||
|
EXPECT_EQ (a.match ("adg"), false);
|
||||||
|
EXPECT_EQ (a.match ("ag"), false);
|
||||||
|
EXPECT_EQ (a.match ("a"), true);
|
||||||
|
EXPECT_EQ (a.match ("abch"), false);
|
||||||
|
EXPECT_EQ (a.match ("adh"), false);
|
||||||
|
EXPECT_EQ (a.match ("ah"), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(7)
|
TEST(7)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue