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 &);
|
||||
};
|
||||
|
||||
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
|
||||
: 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);
|
||||
if (alt) {
|
||||
alt_op->add_choice (alt);
|
||||
} else {
|
||||
alt_op->add_choice (new GlobPatternEmpty ());
|
||||
}
|
||||
if (*p == ',') {
|
||||
++p;
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ TEST(6)
|
|||
|
||||
EXPECT_EQ (a.match ("abcg"), true);
|
||||
EXPECT_EQ (a.match ("adg"), true);
|
||||
EXPECT_EQ (a.match ("ad"), false);
|
||||
EXPECT_EQ (a.match ("ag"), false);
|
||||
EXPECT_EQ (a.match ("abch"), false);
|
||||
EXPECT_EQ (a.match ("adh"), false);
|
||||
|
|
@ -173,11 +174,33 @@ TEST(6)
|
|||
|
||||
EXPECT_EQ (aa.match ("abcg"), true);
|
||||
EXPECT_EQ (aa.match ("adg"), true);
|
||||
EXPECT_EQ (aa.match ("ad"), false);
|
||||
EXPECT_EQ (aa.match ("ag"), false);
|
||||
EXPECT_EQ (aa.match ("abch"), false);
|
||||
EXPECT_EQ (aa.match ("adh"), 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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue