mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +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;
|
return GetType()->Tag() == TYPE_TABLE || GetType()->Tag() == TYPE_VECTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
TypePtr NameExpr::DelType() const { return GetType(); }
|
|
||||||
|
|
||||||
ValPtr NameExpr::Delete(Frame* f) {
|
ValPtr NameExpr::Delete(Frame* f) {
|
||||||
auto v = Eval(f);
|
auto v = Eval(f);
|
||||||
if ( v ) {
|
if ( v ) {
|
||||||
|
@ -2524,13 +2522,6 @@ bool IndexExpr::CanDel() const {
|
||||||
return op1->GetType()->Tag() == TYPE_TABLE;
|
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) {
|
ValPtr IndexExpr::Add(Frame* f) {
|
||||||
if ( IsError() )
|
if ( IsError() )
|
||||||
return nullptr;
|
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); }
|
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) {
|
void FieldExpr::Assign(Frame* f, ValPtr v) {
|
||||||
if ( IsError() )
|
if ( IsError() )
|
||||||
return;
|
return;
|
||||||
|
@ -2807,8 +2796,12 @@ void FieldExpr::Assign(ValPtr lhs, ValPtr rhs) {
|
||||||
|
|
||||||
ValPtr FieldExpr::Delete(Frame* f) {
|
ValPtr FieldExpr::Delete(Frame* f) {
|
||||||
auto op_v = op->Eval(f);
|
auto op_v = op->Eval(f);
|
||||||
|
if ( ! op_v )
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
auto former = op_v->AsRecordVal()->GetField(field);
|
||||||
Assign(op_v, nullptr);
|
Assign(op_v, nullptr);
|
||||||
return op_v;
|
return former;
|
||||||
}
|
}
|
||||||
|
|
||||||
ValPtr FieldExpr::Fold(Val* v) const {
|
ValPtr FieldExpr::Fold(Val* v) const {
|
||||||
|
|
|
@ -427,7 +427,6 @@ public:
|
||||||
explicit NameExpr(IDPtr id, bool const_init = false);
|
explicit NameExpr(IDPtr id, bool const_init = false);
|
||||||
|
|
||||||
bool CanDel() const override;
|
bool CanDel() const override;
|
||||||
TypePtr DelType() const override;
|
|
||||||
ValPtr Delete(Frame* f) override;
|
ValPtr Delete(Frame* f) override;
|
||||||
|
|
||||||
ID* Id() const { return id.get(); }
|
ID* Id() const { return id.get(); }
|
||||||
|
@ -717,6 +716,7 @@ public:
|
||||||
// Optimization-related:
|
// Optimization-related:
|
||||||
bool IsReduced(Reducer* c) const override { return HasReducedOps(c); }
|
bool IsReduced(Reducer* c) const override { return HasReducedOps(c); }
|
||||||
bool HasReducedOps(Reducer* c) const override { return op->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 {
|
class AggrAddExpr final : public AggrAddDelExpr {
|
||||||
|
@ -1017,9 +1017,6 @@ public:
|
||||||
bool CanAdd() const override;
|
bool CanAdd() const override;
|
||||||
bool CanDel() const override;
|
bool CanDel() const override;
|
||||||
|
|
||||||
TypePtr AddType() const override;
|
|
||||||
TypePtr DelType() const override;
|
|
||||||
|
|
||||||
ValPtr Add(Frame* f) override;
|
ValPtr Add(Frame* f) override;
|
||||||
ValPtr Delete(Frame* f) override;
|
ValPtr Delete(Frame* f) override;
|
||||||
|
|
||||||
|
@ -1119,7 +1116,6 @@ public:
|
||||||
const char* FieldName() const { return field_name; }
|
const char* FieldName() const { return field_name; }
|
||||||
|
|
||||||
bool CanDel() const override;
|
bool CanDel() const override;
|
||||||
TypePtr DelType() const override;
|
|
||||||
|
|
||||||
void Assign(Frame* f, ValPtr v) override;
|
void Assign(Frame* f, ValPtr v) override;
|
||||||
ValPtr Delete(Frame* f) override;
|
ValPtr Delete(Frame* f) override;
|
||||||
|
|
|
@ -148,7 +148,7 @@ TraversalCode CSE_ValidityChecker::PreExpr(const Expr* e) {
|
||||||
auto aggr = e->GetOp1();
|
auto aggr = e->GetOp1();
|
||||||
auto aggr_t = aggr->GetType();
|
auto aggr_t = aggr->GetType();
|
||||||
|
|
||||||
if ( in_aggr_mod_expr ) {
|
if ( in_aggr_mod_expr > 0 ) {
|
||||||
auto aggr_id = aggr->AsNameExpr()->Id();
|
auto aggr_id = aggr->AsNameExpr()->Id();
|
||||||
|
|
||||||
if ( CheckID(aggr_id, true) || CheckAggrMod(aggr_t) )
|
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) {
|
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;
|
--in_aggr_mod_expr;
|
||||||
|
|
||||||
return TC_CONTINUE;
|
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);
|
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 AggrAddExpr::Duplicate() { return SetSucc(new AggrAddExpr(op->Duplicate())); }
|
||||||
|
|
||||||
ExprPtr AggrDelExpr::Duplicate() { return SetSucc(new AggrDelExpr(op->Duplicate())); }
|
ExprPtr AggrDelExpr::Duplicate() { return SetSucc(new AggrDelExpr(op->Duplicate())); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue