Allow comparing two PatternVals

This commit is contained in:
Tim Wojtulewicz 2024-11-21 13:04:40 -07:00
parent 9f5cd54e78
commit 7670a6f589

View file

@ -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,6 +1997,12 @@ 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 ) {
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*>(); auto re = v1->As<PatternVal*>();
const String* s = v2->AsString(); const String* s = v2->AsString();
if ( tag == EXPR_EQ ) if ( tag == EXPR_EQ )
@ -2003,6 +2010,7 @@ ValPtr EqExpr::Fold(Val* v1, Val* v2) const {
else else
return val_mgr->Bool(! re->MatchExactly(s)); 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();
return val_mgr->Bool(tag == EXPR_EQ ? res : ! res); return val_mgr->Bool(tag == EXPR_EQ ? res : ! res);