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
|
@ -1965,6 +1965,7 @@ EqExpr::EqExpr(ExprTag arg_tag, ExprPtr arg_op1, ExprPtr arg_op2)
|
|||
case TYPE_ADDR:
|
||||
case TYPE_SUBNET:
|
||||
case TYPE_ERROR:
|
||||
case TYPE_PATTERN:
|
||||
case TYPE_FUNC: break;
|
||||
|
||||
case TYPE_ENUM:
|
||||
|
@ -1996,6 +1997,12 @@ EqExpr::EqExpr(ExprTag arg_tag, ExprPtr arg_op1, ExprPtr arg_op2)
|
|||
|
||||
ValPtr EqExpr::Fold(Val* v1, Val* v2) const {
|
||||
if ( op1->GetType()->Tag() == TYPE_PATTERN ) {
|
||||
if ( op2->GetType()->Tag() == TYPE_PATTERN ) {
|
||||
auto re1 = v1->As<PatternVal*>();
|
||||
auto re2 = v2->As<PatternVal*>();
|
||||
return val_mgr->Bool(strcmp(re1->Get()->PatternText(), re2->Get()->PatternText()) == 0);
|
||||
}
|
||||
else {
|
||||
auto re = v1->As<PatternVal*>();
|
||||
const String* s = v2->AsString();
|
||||
if ( tag == EXPR_EQ )
|
||||
|
@ -2003,6 +2010,7 @@ ValPtr EqExpr::Fold(Val* v1, Val* v2) const {
|
|||
else
|
||||
return val_mgr->Bool(! re->MatchExactly(s));
|
||||
}
|
||||
}
|
||||
else if ( op1->GetType()->Tag() == TYPE_FUNC ) {
|
||||
auto res = v1->AsFunc() == v2->AsFunc();
|
||||
return val_mgr->Bool(tag == EXPR_EQ ? res : ! res);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue