mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
bug fixes
This commit is contained in:
parent
2befa8d3a9
commit
d69738849e
4 changed files with 19 additions and 19 deletions
17
src/Expr.cc
17
src/Expr.cc
|
@ -422,8 +422,6 @@ bool NameExpr::CanDel() const {
|
|||
return GetType()->Tag() == TYPE_TABLE || GetType()->Tag() == TYPE_VECTOR;
|
||||
}
|
||||
|
||||
TypePtr NameExpr::DelType() const { return GetType(); }
|
||||
|
||||
ValPtr NameExpr::Delete(Frame* f) {
|
||||
auto v = Eval(f);
|
||||
if ( v ) {
|
||||
|
@ -2524,13 +2522,6 @@ bool IndexExpr::CanDel() const {
|
|||
return op1->GetType()->Tag() == TYPE_TABLE;
|
||||
}
|
||||
|
||||
TypePtr IndexExpr::AddType() const { return op1->GetType(); }
|
||||
|
||||
TypePtr IndexExpr::DelType() const {
|
||||
auto y = op1->GetType()->Yield();
|
||||
return y ? y : base_type(TYPE_VOID);
|
||||
}
|
||||
|
||||
ValPtr IndexExpr::Add(Frame* f) {
|
||||
if ( IsError() )
|
||||
return nullptr;
|
||||
|
@ -2791,8 +2782,6 @@ ExprPtr FieldExpr::MakeLvalue() { return with_location_of(make_intrusive<RefExpr
|
|||
|
||||
bool FieldExpr::CanDel() const { return td->GetAttr(ATTR_DEFAULT) || td->GetAttr(ATTR_OPTIONAL); }
|
||||
|
||||
TypePtr FieldExpr::DelType() const { return GetType(); }
|
||||
|
||||
void FieldExpr::Assign(Frame* f, ValPtr v) {
|
||||
if ( IsError() )
|
||||
return;
|
||||
|
@ -2807,8 +2796,12 @@ void FieldExpr::Assign(ValPtr lhs, ValPtr rhs) {
|
|||
|
||||
ValPtr FieldExpr::Delete(Frame* f) {
|
||||
auto op_v = op->Eval(f);
|
||||
if ( ! op_v )
|
||||
return nullptr;
|
||||
|
||||
auto former = op_v->AsRecordVal()->GetField(field);
|
||||
Assign(op_v, nullptr);
|
||||
return op_v;
|
||||
return former;
|
||||
}
|
||||
|
||||
ValPtr FieldExpr::Fold(Val* v) const {
|
||||
|
|
|
@ -427,7 +427,6 @@ public:
|
|||
explicit NameExpr(IDPtr id, bool const_init = false);
|
||||
|
||||
bool CanDel() const override;
|
||||
TypePtr DelType() const override;
|
||||
ValPtr Delete(Frame* f) override;
|
||||
|
||||
ID* Id() const { return id.get(); }
|
||||
|
@ -717,6 +716,7 @@ public:
|
|||
// Optimization-related:
|
||||
bool IsReduced(Reducer* c) const override { return HasReducedOps(c); }
|
||||
bool HasReducedOps(Reducer* c) const override { return op->HasReducedOps(c); }
|
||||
ExprPtr Reduce(Reducer* c, StmtPtr& red_stmt) override;
|
||||
};
|
||||
|
||||
class AggrAddExpr final : public AggrAddDelExpr {
|
||||
|
@ -1017,9 +1017,6 @@ public:
|
|||
bool CanAdd() const override;
|
||||
bool CanDel() const override;
|
||||
|
||||
TypePtr AddType() const override;
|
||||
TypePtr DelType() const override;
|
||||
|
||||
ValPtr Add(Frame* f) override;
|
||||
ValPtr Delete(Frame* f) override;
|
||||
|
||||
|
@ -1119,7 +1116,6 @@ public:
|
|||
const char* FieldName() const { return field_name; }
|
||||
|
||||
bool CanDel() const override;
|
||||
TypePtr DelType() const override;
|
||||
|
||||
void Assign(Frame* f, ValPtr v) override;
|
||||
ValPtr Delete(Frame* f) override;
|
||||
|
|
|
@ -148,7 +148,7 @@ TraversalCode CSE_ValidityChecker::PreExpr(const Expr* e) {
|
|||
auto aggr = e->GetOp1();
|
||||
auto aggr_t = aggr->GetType();
|
||||
|
||||
if ( in_aggr_mod_expr ) {
|
||||
if ( in_aggr_mod_expr > 0 ) {
|
||||
auto aggr_id = aggr->AsNameExpr()->Id();
|
||||
|
||||
if ( CheckID(aggr_id, true) || CheckAggrMod(aggr_t) )
|
||||
|
@ -168,7 +168,7 @@ TraversalCode CSE_ValidityChecker::PreExpr(const Expr* e) {
|
|||
}
|
||||
|
||||
TraversalCode CSE_ValidityChecker::PostExpr(const Expr* e) {
|
||||
if ( e->Tag() == EXPR_AGGR_ADD || e->Tag() == EXPR_AGGR_DEL )
|
||||
if ( have_start_e && (e->Tag() == EXPR_AGGR_ADD || e->Tag() == EXPR_AGGR_DEL) )
|
||||
--in_aggr_mod_expr;
|
||||
|
||||
return TC_CONTINUE;
|
||||
|
|
|
@ -723,6 +723,17 @@ ExprPtr AddExpr::BuildSub(const ExprPtr& op1, const ExprPtr& op2) {
|
|||
return with_location_of(make_intrusive<SubExpr>(op1, rhs), this);
|
||||
}
|
||||
|
||||
ExprPtr AggrAddDelExpr::Reduce(Reducer* c, StmtPtr& red_stmt) {
|
||||
if ( type )
|
||||
return UnaryExpr::Reduce(c, red_stmt);
|
||||
|
||||
if ( c->Optimizing() )
|
||||
op = c->UpdateExpr(op);
|
||||
|
||||
red_stmt = op->ReduceToSingletons(c);
|
||||
return ThisPtr();
|
||||
}
|
||||
|
||||
ExprPtr AggrAddExpr::Duplicate() { return SetSucc(new AggrAddExpr(op->Duplicate())); }
|
||||
|
||||
ExprPtr AggrDelExpr::Duplicate() { return SetSucc(new AggrDelExpr(op->Duplicate())); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue