mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Allow comparing two PatternVals
This commit is contained in:
parent
9f5cd54e78
commit
7670a6f589
1 changed files with 14 additions and 6 deletions
20
src/Expr.cc
20
src/Expr.cc
|
@ -1965,6 +1965,7 @@ EqExpr::EqExpr(ExprTag arg_tag, ExprPtr arg_op1, ExprPtr arg_op2)
|
||||||
case TYPE_ADDR:
|
case TYPE_ADDR:
|
||||||
case TYPE_SUBNET:
|
case TYPE_SUBNET:
|
||||||
case TYPE_ERROR:
|
case TYPE_ERROR:
|
||||||
|
case TYPE_PATTERN:
|
||||||
case TYPE_FUNC: break;
|
case TYPE_FUNC: break;
|
||||||
|
|
||||||
case TYPE_ENUM:
|
case TYPE_ENUM:
|
||||||
|
@ -1996,12 +1997,19 @@ EqExpr::EqExpr(ExprTag arg_tag, ExprPtr arg_op1, ExprPtr arg_op2)
|
||||||
|
|
||||||
ValPtr EqExpr::Fold(Val* v1, Val* v2) const {
|
ValPtr EqExpr::Fold(Val* v1, Val* v2) const {
|
||||||
if ( op1->GetType()->Tag() == TYPE_PATTERN ) {
|
if ( op1->GetType()->Tag() == TYPE_PATTERN ) {
|
||||||
auto re = v1->As<PatternVal*>();
|
if ( op2->GetType()->Tag() == TYPE_PATTERN ) {
|
||||||
const String* s = v2->AsString();
|
auto re1 = v1->As<PatternVal*>();
|
||||||
if ( tag == EXPR_EQ )
|
auto re2 = v2->As<PatternVal*>();
|
||||||
return val_mgr->Bool(re->MatchExactly(s));
|
return val_mgr->Bool(strcmp(re1->Get()->PatternText(), re2->Get()->PatternText()) == 0);
|
||||||
else
|
}
|
||||||
return val_mgr->Bool(! re->MatchExactly(s));
|
else {
|
||||||
|
auto re = v1->As<PatternVal*>();
|
||||||
|
const String* s = v2->AsString();
|
||||||
|
if ( tag == EXPR_EQ )
|
||||||
|
return val_mgr->Bool(re->MatchExactly(s));
|
||||||
|
else
|
||||||
|
return val_mgr->Bool(! re->MatchExactly(s));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ( op1->GetType()->Tag() == TYPE_FUNC ) {
|
else if ( op1->GetType()->Tag() == TYPE_FUNC ) {
|
||||||
auto res = v1->AsFunc() == v2->AsFunc();
|
auto res = v1->AsFunc() == v2->AsFunc();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue