mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 15:48:19 +00:00
accessors and converters for Stmt subclasses
This commit is contained in:
parent
ca33a15626
commit
c380a2a61a
3 changed files with 38 additions and 5 deletions
24
src/Stmt.cc
24
src/Stmt.cc
|
@ -84,6 +84,18 @@ const InitStmt* Stmt::AsInitStmt() const
|
|||
return (const InitStmt*) this;
|
||||
}
|
||||
|
||||
const IfStmt* Stmt::AsIfStmt() const
|
||||
{
|
||||
CHECK_TAG(tag, STMT_IF, "Stmt::AsIfStmt", stmt_name)
|
||||
return (const IfStmt*) this;
|
||||
}
|
||||
|
||||
const WhileStmt* Stmt::AsWhileStmt() const
|
||||
{
|
||||
CHECK_TAG(tag, STMT_WHILE, "Stmt::AsWhileStmt", stmt_name)
|
||||
return (const WhileStmt*) this;
|
||||
}
|
||||
|
||||
const WhenStmt* Stmt::AsWhenStmt() const
|
||||
{
|
||||
CHECK_TAG(tag, STMT_WHEN, "Stmt::AsWhenStmt", stmt_name)
|
||||
|
@ -102,6 +114,18 @@ const ExprStmt* Stmt::AsExprStmt() const
|
|||
return (const ExprStmt*) this;
|
||||
}
|
||||
|
||||
const PrintStmt* Stmt::AsPrintStmt() const
|
||||
{
|
||||
CHECK_TAG(tag, STMT_PRINT, "Stmt::AsPrintStmt", stmt_name)
|
||||
return (const PrintStmt*) this;
|
||||
}
|
||||
|
||||
const CatchReturnStmt* Stmt::AsCatchReturnStmt() const
|
||||
{
|
||||
CHECK_TAG(tag, STMT_CATCH_RETURN, "Stmt::AsCatchReturnStmt", stmt_name)
|
||||
return (const CatchReturnStmt*) this;
|
||||
}
|
||||
|
||||
const ReturnStmt* Stmt::AsReturnStmt() const
|
||||
{
|
||||
CHECK_TAG(tag, STMT_RETURN, "Stmt::AsReturnStmt", stmt_name)
|
||||
|
|
11
src/Stmt.h
11
src/Stmt.h
|
@ -165,6 +165,7 @@ public:
|
|||
~SwitchStmt() override;
|
||||
|
||||
const case_list* Cases() const { return cases; }
|
||||
bool HasDefault() const { return default_case_idx != -1; }
|
||||
|
||||
void StmtDescribe(ODesc* d) const override;
|
||||
|
||||
|
@ -275,20 +276,20 @@ public:
|
|||
TraversalCode Traverse(TraversalCallback* cb) const override;
|
||||
|
||||
// Optimization-related:
|
||||
StmtPtr CondPredStmt() const
|
||||
{ return loop_cond_pred_stmt; }
|
||||
StmtPtr Duplicate() override;
|
||||
void Inline(Inliner* inl) override;
|
||||
|
||||
bool IsReduced(Reducer* c) const override;
|
||||
StmtPtr DoReduce(Reducer* c) override;
|
||||
|
||||
const ExprPtr& Condition() const { return loop_condition; }
|
||||
StmtPtr CondPredStmt() const { return loop_cond_pred_stmt; }
|
||||
const StmtPtr& Body() const { return body; }
|
||||
const StmtPtr& ConditionAsStmt() const { return stmt_loop_condition; }
|
||||
|
||||
// Note, no need for a NoFlowAfter method because the loop might
|
||||
// execute zero times, so it's always the default of "false".
|
||||
|
||||
const StmtPtr ConditionAsStmt() const
|
||||
{ return stmt_loop_condition; }
|
||||
|
||||
protected:
|
||||
ValPtr Exec(Frame* f, StmtFlowType& flow) const override;
|
||||
|
||||
|
|
|
@ -24,13 +24,17 @@ using ValPtr = IntrusivePtr<Val>;
|
|||
|
||||
namespace zeek::detail {
|
||||
|
||||
class CatchReturnStmt;
|
||||
class ExprStmt;
|
||||
class ForStmt;
|
||||
class IfStmt;
|
||||
class InitStmt;
|
||||
class PrintStmt;
|
||||
class ReturnStmt;
|
||||
class StmtList;
|
||||
class SwitchStmt;
|
||||
class WhenStmt;
|
||||
class WhileStmt;
|
||||
|
||||
class EventExpr;
|
||||
class ListExpr;
|
||||
|
@ -69,8 +73,12 @@ public:
|
|||
const ForStmt* AsForStmt() const;
|
||||
|
||||
const ExprStmt* AsExprStmt() const;
|
||||
const PrintStmt* AsPrintStmt() const;
|
||||
const InitStmt* AsInitStmt() const;
|
||||
const CatchReturnStmt* AsCatchReturnStmt() const;
|
||||
const ReturnStmt* AsReturnStmt() const;
|
||||
const IfStmt* AsIfStmt() const;
|
||||
const WhileStmt* AsWhileStmt() const;
|
||||
const WhenStmt* AsWhenStmt() const;
|
||||
const SwitchStmt* AsSwitchStmt() const;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue