mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 23:58:20 +00:00
-O gen-C++ support for pattern-to-pattern comparison
This commit is contained in:
parent
f48f3af79a
commit
e1a859c31b
1 changed files with 17 additions and 4 deletions
|
@ -998,10 +998,23 @@ string CPPCompile::GenEQ(const Expr* e, GenType gt, const char* op, const char*
|
||||||
auto tag = op1->GetType()->Tag();
|
auto tag = op1->GetType()->Tag();
|
||||||
string negated(e->Tag() == EXPR_EQ ? "" : "! ");
|
string negated(e->Tag() == EXPR_EQ ? "" : "! ");
|
||||||
|
|
||||||
if ( tag == TYPE_PATTERN )
|
if ( tag == TYPE_PATTERN ) {
|
||||||
return NativeToGT(negated + GenExpr(op1, GEN_DONT_CARE) + "->MatchExactly(" + GenExpr(op2, GEN_DONT_CARE) +
|
auto gen1 = GenExpr(op1, GEN_DONT_CARE);
|
||||||
"->AsString())",
|
auto gen2 = GenExpr(op2, GEN_DONT_CARE);
|
||||||
e->GetType(), gt);
|
string gen;
|
||||||
|
|
||||||
|
if ( op2->GetType()->Tag() == TYPE_PATTERN ) {
|
||||||
|
gen1 += "->AsPattern()->PatternText()";
|
||||||
|
gen2 += "->AsPattern()->PatternText()";
|
||||||
|
|
||||||
|
gen = "(strcmp(" + gen1 + ", " + gen2 + ") == 0)";
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
gen = gen1 + "->MatchExactly(" + gen2 + "->AsString())";
|
||||||
|
|
||||||
|
return NativeToGT(negated + gen, e->GetType(), gt);
|
||||||
|
}
|
||||||
|
|
||||||
if ( tag == TYPE_FUNC ) {
|
if ( tag == TYPE_FUNC ) {
|
||||||
auto gen_f1 = GenExpr(op1, GEN_DONT_CARE);
|
auto gen_f1 = GenExpr(op1, GEN_DONT_CARE);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue