diff --git a/src/Expr.h b/src/Expr.h index 92edcf5197..4df84bf30e 100644 --- a/src/Expr.h +++ b/src/Expr.h @@ -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 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; diff --git a/src/script_opt/Expr.cc b/src/script_opt/Expr.cc index b852f125b3..f347006762 100644 --- a/src/script_opt/Expr.cc +++ b/src/script_opt/Expr.cc @@ -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; }