mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Switch some Stmt transform/reduce logic to use IntrusivePtr
This commit is contained in:
parent
b799665c1a
commit
177b723a60
2 changed files with 18 additions and 19 deletions
|
@ -156,9 +156,8 @@ protected:
|
||||||
explicit Stmt(StmtTag arg_tag);
|
explicit Stmt(StmtTag arg_tag);
|
||||||
|
|
||||||
// Helper function called after reductions to perform canonical
|
// Helper function called after reductions to perform canonical
|
||||||
// actions. Takes a bare pointer for new_me because usually
|
// actions.
|
||||||
// it's been newly new'd, so this keeps down code clutter.
|
StmtPtr TransformMe(StmtPtr new_me, Reducer* c);
|
||||||
StmtPtr TransformMe(Stmt* new_me, Reducer* c);
|
|
||||||
|
|
||||||
void AddTag(ODesc* d) const;
|
void AddTag(ODesc* d) const;
|
||||||
virtual void StmtDescribe(ODesc* d) const;
|
virtual void StmtDescribe(ODesc* d) const;
|
||||||
|
|
|
@ -37,7 +37,7 @@ StmtPtr Stmt::Reduce(Reducer* c)
|
||||||
return DoReduce(c);
|
return DoReduce(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
StmtPtr Stmt::TransformMe(Stmt* new_me, Reducer* c)
|
StmtPtr Stmt::TransformMe(StmtPtr new_me, Reducer* c)
|
||||||
{
|
{
|
||||||
ASSERT(new_me != this);
|
ASSERT(new_me != this);
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ StmtPtr ExprListStmt::DoReduce(Reducer* c)
|
||||||
return ThisPtr();
|
return ThisPtr();
|
||||||
|
|
||||||
auto new_l = make_intrusive<ListExpr>();
|
auto new_l = make_intrusive<ListExpr>();
|
||||||
auto s = new StmtList;
|
auto s = make_intrusive<StmtList>();
|
||||||
|
|
||||||
ExprPList& e = l->Exprs();
|
ExprPList& e = l->Exprs();
|
||||||
for ( auto& expr : e )
|
for ( auto& expr : e )
|
||||||
|
@ -143,12 +143,12 @@ StmtPtr ExprStmt::DoReduce(Reducer* c)
|
||||||
{
|
{
|
||||||
if ( ! e )
|
if ( ! e )
|
||||||
// e can be nil for our derived classes (like ReturnStmt).
|
// e can be nil for our derived classes (like ReturnStmt).
|
||||||
return TransformMe(new NullStmt, c);
|
return TransformMe(make_intrusive<NullStmt>(), c);
|
||||||
|
|
||||||
auto t = e->Tag();
|
auto t = e->Tag();
|
||||||
|
|
||||||
if ( t == EXPR_NOP )
|
if ( t == EXPR_NOP )
|
||||||
return TransformMe(new NullStmt, c);
|
return TransformMe(make_intrusive<NullStmt>(), c);
|
||||||
|
|
||||||
if ( c->Optimizing() )
|
if ( c->Optimizing() )
|
||||||
{
|
{
|
||||||
|
@ -158,7 +158,7 @@ StmtPtr ExprStmt::DoReduce(Reducer* c)
|
||||||
|
|
||||||
if ( e->IsSingleton(c) )
|
if ( e->IsSingleton(c) )
|
||||||
// No point evaluating.
|
// No point evaluating.
|
||||||
return TransformMe(new NullStmt, c);
|
return TransformMe(make_intrusive<NullStmt>(), c);
|
||||||
|
|
||||||
if ( (t == EXPR_ASSIGN || t == EXPR_CALL ||
|
if ( (t == EXPR_ASSIGN || t == EXPR_CALL ||
|
||||||
t == EXPR_INDEX_ASSIGN || t == EXPR_FIELD_LHS_ASSIGN ||
|
t == EXPR_INDEX_ASSIGN || t == EXPR_FIELD_LHS_ASSIGN ||
|
||||||
|
@ -178,7 +178,7 @@ StmtPtr ExprStmt::DoReduce(Reducer* c)
|
||||||
|
|
||||||
if ( red_e_stmt )
|
if ( red_e_stmt )
|
||||||
{
|
{
|
||||||
auto s = new StmtList(red_e_stmt, ThisPtr());
|
auto s = make_intrusive<StmtList>(red_e_stmt, ThisPtr());
|
||||||
return TransformMe(s, c);
|
return TransformMe(s, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ StmtPtr IfStmt::DoReduce(Reducer* c)
|
||||||
s2 = s2->Reduce(c);
|
s2 = s2->Reduce(c);
|
||||||
|
|
||||||
if ( s1->Tag() == STMT_NULL && s2->Tag() == STMT_NULL )
|
if ( s1->Tag() == STMT_NULL && s2->Tag() == STMT_NULL )
|
||||||
return TransformMe(new NullStmt, c);
|
return TransformMe(make_intrusive<NullStmt>(), c);
|
||||||
|
|
||||||
if ( c->Optimizing() )
|
if ( c->Optimizing() )
|
||||||
e = c->OptExpr(e);
|
e = c->OptExpr(e);
|
||||||
|
@ -293,13 +293,13 @@ StmtPtr IfStmt::DoReduce(Reducer* c)
|
||||||
return t ? s1 : s2;
|
return t ? s1 : s2;
|
||||||
|
|
||||||
if ( t )
|
if ( t )
|
||||||
return TransformMe(new StmtList(red_e_stmt, s1), c);
|
return TransformMe(make_intrusive<StmtList>(red_e_stmt, s1), c);
|
||||||
else
|
else
|
||||||
return TransformMe(new StmtList(red_e_stmt, s2), c);
|
return TransformMe(make_intrusive<StmtList>(red_e_stmt, s2), c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( red_e_stmt )
|
if ( red_e_stmt )
|
||||||
return TransformMe(new StmtList(red_e_stmt, this), c);
|
return TransformMe(make_intrusive<StmtList>(red_e_stmt, this), c);
|
||||||
|
|
||||||
return ThisPtr();
|
return ThisPtr();
|
||||||
}
|
}
|
||||||
|
@ -415,7 +415,7 @@ StmtPtr SwitchStmt::DoReduce(Reducer* rc)
|
||||||
if ( s->Stmts().length() > 0 )
|
if ( s->Stmts().length() > 0 )
|
||||||
{
|
{
|
||||||
StmtPtr me = ThisPtr();
|
StmtPtr me = ThisPtr();
|
||||||
auto pre_and_me = new StmtList(s, me);
|
auto pre_and_me = make_intrusive<StmtList>(s, me);
|
||||||
return TransformMe(pre_and_me, rc);
|
return TransformMe(pre_and_me, rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -465,7 +465,7 @@ StmtPtr AddDelStmt::DoReduce(Reducer* c)
|
||||||
|
|
||||||
if ( red_e_stmt )
|
if ( red_e_stmt )
|
||||||
{
|
{
|
||||||
auto s = new StmtList(red_e_stmt, ThisPtr());
|
auto s = make_intrusive<StmtList>(red_e_stmt, ThisPtr());
|
||||||
return TransformMe(s, c);
|
return TransformMe(s, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,7 +509,7 @@ StmtPtr EventStmt::DoReduce(Reducer* c)
|
||||||
|
|
||||||
if ( red_e_stmt )
|
if ( red_e_stmt )
|
||||||
{
|
{
|
||||||
auto s = new StmtList(red_e_stmt, ThisPtr());
|
auto s = make_intrusive<StmtList>(red_e_stmt, ThisPtr());
|
||||||
return TransformMe(s, c);
|
return TransformMe(s, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -642,7 +642,7 @@ StmtPtr ForStmt::DoReduce(Reducer* c)
|
||||||
Error("empty \"for\" body leaves loop variables in indeterminant state");
|
Error("empty \"for\" body leaves loop variables in indeterminant state");
|
||||||
|
|
||||||
if ( red_e_stmt )
|
if ( red_e_stmt )
|
||||||
return TransformMe(new StmtList(red_e_stmt, this), c);
|
return TransformMe(make_intrusive<StmtList>(red_e_stmt, this), c);
|
||||||
|
|
||||||
return ThisPtr();
|
return ThisPtr();
|
||||||
}
|
}
|
||||||
|
@ -676,7 +676,7 @@ StmtPtr ReturnStmt::DoReduce(Reducer* c)
|
||||||
|
|
||||||
if ( red_e_stmt )
|
if ( red_e_stmt )
|
||||||
{
|
{
|
||||||
auto s = new StmtList(red_e_stmt, ThisPtr());
|
auto s = make_intrusive<StmtList>(red_e_stmt, ThisPtr());
|
||||||
return TransformMe(s, c);
|
return TransformMe(s, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -770,7 +770,7 @@ StmtPtr StmtList::DoReduce(Reducer* c)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( f_stmts->length() == 0 )
|
if ( f_stmts->length() == 0 )
|
||||||
return TransformMe(new NullStmt, c);
|
return TransformMe(make_intrusive<NullStmt>(), c);
|
||||||
|
|
||||||
if ( f_stmts->length() == 1 )
|
if ( f_stmts->length() == 1 )
|
||||||
return (*f_stmts)[0]->Reduce(c);
|
return (*f_stmts)[0]->Reduce(c);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue