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;
|
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
|
const WhenStmt* Stmt::AsWhenStmt() const
|
||||||
{
|
{
|
||||||
CHECK_TAG(tag, STMT_WHEN, "Stmt::AsWhenStmt", stmt_name)
|
CHECK_TAG(tag, STMT_WHEN, "Stmt::AsWhenStmt", stmt_name)
|
||||||
|
@ -102,6 +114,18 @@ const ExprStmt* Stmt::AsExprStmt() const
|
||||||
return (const ExprStmt*) this;
|
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
|
const ReturnStmt* Stmt::AsReturnStmt() const
|
||||||
{
|
{
|
||||||
CHECK_TAG(tag, STMT_RETURN, "Stmt::AsReturnStmt", stmt_name)
|
CHECK_TAG(tag, STMT_RETURN, "Stmt::AsReturnStmt", stmt_name)
|
||||||
|
|
11
src/Stmt.h
11
src/Stmt.h
|
@ -165,6 +165,7 @@ public:
|
||||||
~SwitchStmt() override;
|
~SwitchStmt() override;
|
||||||
|
|
||||||
const case_list* Cases() const { return cases; }
|
const case_list* Cases() const { return cases; }
|
||||||
|
bool HasDefault() const { return default_case_idx != -1; }
|
||||||
|
|
||||||
void StmtDescribe(ODesc* d) const override;
|
void StmtDescribe(ODesc* d) const override;
|
||||||
|
|
||||||
|
@ -275,20 +276,20 @@ public:
|
||||||
TraversalCode Traverse(TraversalCallback* cb) const override;
|
TraversalCode Traverse(TraversalCallback* cb) const override;
|
||||||
|
|
||||||
// Optimization-related:
|
// Optimization-related:
|
||||||
StmtPtr CondPredStmt() const
|
|
||||||
{ return loop_cond_pred_stmt; }
|
|
||||||
StmtPtr Duplicate() override;
|
StmtPtr Duplicate() override;
|
||||||
void Inline(Inliner* inl) override;
|
void Inline(Inliner* inl) override;
|
||||||
|
|
||||||
bool IsReduced(Reducer* c) const override;
|
bool IsReduced(Reducer* c) const override;
|
||||||
StmtPtr DoReduce(Reducer* c) 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
|
// Note, no need for a NoFlowAfter method because the loop might
|
||||||
// execute zero times, so it's always the default of "false".
|
// execute zero times, so it's always the default of "false".
|
||||||
|
|
||||||
const StmtPtr ConditionAsStmt() const
|
|
||||||
{ return stmt_loop_condition; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ValPtr Exec(Frame* f, StmtFlowType& flow) const override;
|
ValPtr Exec(Frame* f, StmtFlowType& flow) const override;
|
||||||
|
|
||||||
|
|
|
@ -24,13 +24,17 @@ using ValPtr = IntrusivePtr<Val>;
|
||||||
|
|
||||||
namespace zeek::detail {
|
namespace zeek::detail {
|
||||||
|
|
||||||
|
class CatchReturnStmt;
|
||||||
class ExprStmt;
|
class ExprStmt;
|
||||||
class ForStmt;
|
class ForStmt;
|
||||||
|
class IfStmt;
|
||||||
class InitStmt;
|
class InitStmt;
|
||||||
|
class PrintStmt;
|
||||||
class ReturnStmt;
|
class ReturnStmt;
|
||||||
class StmtList;
|
class StmtList;
|
||||||
class SwitchStmt;
|
class SwitchStmt;
|
||||||
class WhenStmt;
|
class WhenStmt;
|
||||||
|
class WhileStmt;
|
||||||
|
|
||||||
class EventExpr;
|
class EventExpr;
|
||||||
class ListExpr;
|
class ListExpr;
|
||||||
|
@ -69,8 +73,12 @@ public:
|
||||||
const ForStmt* AsForStmt() const;
|
const ForStmt* AsForStmt() const;
|
||||||
|
|
||||||
const ExprStmt* AsExprStmt() const;
|
const ExprStmt* AsExprStmt() const;
|
||||||
|
const PrintStmt* AsPrintStmt() const;
|
||||||
const InitStmt* AsInitStmt() const;
|
const InitStmt* AsInitStmt() const;
|
||||||
|
const CatchReturnStmt* AsCatchReturnStmt() const;
|
||||||
const ReturnStmt* AsReturnStmt() const;
|
const ReturnStmt* AsReturnStmt() const;
|
||||||
|
const IfStmt* AsIfStmt() const;
|
||||||
|
const WhileStmt* AsWhileStmt() const;
|
||||||
const WhenStmt* AsWhenStmt() const;
|
const WhenStmt* AsWhenStmt() const;
|
||||||
const SwitchStmt* AsSwitchStmt() const;
|
const SwitchStmt* AsSwitchStmt() const;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue