accessors for additional Expr subclasses

This commit is contained in:
Vern Paxson 2021-02-27 10:48:16 -08:00
parent a912f6dd9a
commit 2b0a1bd2e9
2 changed files with 19 additions and 0 deletions

View file

@ -82,6 +82,7 @@ enum BroExprTag : int {
extern const char* expr_name(BroExprTag t);
class AddToExpr;
class AnyIndexExpr;
class AssignExpr;
class CallExpr;
class ConstExpr;
@ -93,6 +94,7 @@ class ForExpr;
class HasFieldExpr;
class IndexAssignExpr;
class IndexExpr;
class IsExpr;
class InlineExpr;
class ListExpr;
class NameExpr;
@ -200,6 +202,7 @@ public:
IntrusivePtr<ctype> As ## ctype ## Ptr ();
ZEEK_EXPR_ACCESSOR_DECLS(AddToExpr)
ZEEK_EXPR_ACCESSOR_DECLS(AnyIndexExpr)
ZEEK_EXPR_ACCESSOR_DECLS(AssignExpr)
ZEEK_EXPR_ACCESSOR_DECLS(CallExpr)
ZEEK_EXPR_ACCESSOR_DECLS(ConstExpr)
@ -211,6 +214,7 @@ public:
ZEEK_EXPR_ACCESSOR_DECLS(HasFieldExpr)
ZEEK_EXPR_ACCESSOR_DECLS(IndexAssignExpr)
ZEEK_EXPR_ACCESSOR_DECLS(IndexExpr)
ZEEK_EXPR_ACCESSOR_DECLS(IsExpr)
ZEEK_EXPR_ACCESSOR_DECLS(InlineExpr)
ZEEK_EXPR_ACCESSOR_DECLS(ListExpr)
ZEEK_EXPR_ACCESSOR_DECLS(NameExpr)
@ -1009,6 +1013,7 @@ public:
~HasFieldExpr() override;
const char* FieldName() const { return field_name; }
int Field() const { return field; }
// Optimization-related:
ExprPtr Duplicate() override;
@ -1424,6 +1429,8 @@ class IsExpr final : public UnaryExpr {
public:
IsExpr(ExprPtr op, TypePtr t);
TypePtr TestType() const { return t; }
// Optimization-related:
ExprPtr Duplicate() override;

View file

@ -67,12 +67,24 @@ const AddToExpr* Expr::AsAddToExpr() const
return (const AddToExpr*) this;
}
const IsExpr* Expr::AsIsExpr() const
{
CHECK_TAG(tag, EXPR_IS, "ExprVal::AsIsExpr", expr_name)
return (const IsExpr*) this;
}
const InlineExpr* Expr::AsInlineExpr() const
{
CHECK_TAG(tag, EXPR_INLINE, "ExprVal::AsInlineExpr", expr_name)
return (const InlineExpr*) this;
}
const AnyIndexExpr* Expr::AsAnyIndexExpr() const
{
CHECK_TAG(tag, EXPR_ANY_INDEX, "ExprVal::AsAnyIndexExpr", expr_name)
return (const AnyIndexExpr*) this;
}
ExprPtr Expr::GetOp1() const { return nullptr; }
ExprPtr Expr::GetOp2() const { return nullptr; }
ExprPtr Expr::GetOp3() const { return nullptr; }