add/delete expressions working w/ interpreter

This commit is contained in:
Vern Paxson 2024-05-08 12:52:06 -07:00
parent 2c46d3139c
commit 905ed55389
6 changed files with 153 additions and 44 deletions

View file

@ -723,6 +723,30 @@ ExprPtr AddExpr::BuildSub(const ExprPtr& op1, const ExprPtr& op2) {
return with_location_of(make_intrusive<SubExpr>(op1, rhs), this);
}
ExprPtr AggrAddExpr::Duplicate() { return SetSucc(new AggrAddExpr(op->Duplicate())); }
ExprPtr AggrAddExpr::Reduce(Reducer* c, StmtPtr& red_stmt) {
if ( c->Optimizing() ) {
op = c->OptExpr(op);
return ThisPtr();
}
red_stmt = op->ReduceToSingletons(c);
return ThisPtr();
}
ExprPtr AggrDelExpr::Duplicate() { return SetSucc(new AggrDelExpr(op->Duplicate())); }
ExprPtr AggrDelExpr::Reduce(Reducer* c, StmtPtr& red_stmt) {
if ( c->Optimizing() ) {
op = c->OptExpr(op);
return ThisPtr();
}
red_stmt = op->ReduceToSingletons(c);
return ThisPtr();
}
ExprPtr AddToExpr::Duplicate() {
auto op1_d = op1->Duplicate();
auto op2_d = op2->Duplicate();