diff --git a/src/Expr.h b/src/Expr.h index 5284c0732f..f65ec279d0 100644 --- a/src/Expr.h +++ b/src/Expr.h @@ -113,28 +113,20 @@ enum ExprTag : int { extern const char* expr_name(ExprTag t); class AddToExpr; -class AnyIndexExpr; class AssignExpr; class CallExpr; class ConstExpr; class EventExpr; class FieldAssignExpr; class FieldExpr; -class FieldLHSAssignExpr; class ForExpr; class HasFieldExpr; -class IndexAssignExpr; class IndexExpr; -class InlineExpr; class IsExpr; class LambdaExpr; class ListExpr; class NameExpr; -class RecordCoerceExpr; -class RecordConstructorExpr; class RefExpr; -class SetConstructorExpr; -class TableConstructorExpr; class Expr; using CallExprPtr = IntrusivePtr; @@ -230,34 +222,27 @@ public: void MarkParen() { paren = true; } bool IsParen() const { return paren; } + // These are used by script optimization for AST analysis. #define ZEEK_EXPR_ACCESSOR_DECLS(ctype) \ const ctype* As##ctype() const; \ ctype* As##ctype(); \ 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) ZEEK_EXPR_ACCESSOR_DECLS(EventExpr) ZEEK_EXPR_ACCESSOR_DECLS(FieldAssignExpr) ZEEK_EXPR_ACCESSOR_DECLS(FieldExpr) - ZEEK_EXPR_ACCESSOR_DECLS(FieldLHSAssignExpr) ZEEK_EXPR_ACCESSOR_DECLS(ForExpr) ZEEK_EXPR_ACCESSOR_DECLS(HasFieldExpr) - ZEEK_EXPR_ACCESSOR_DECLS(IndexAssignExpr) ZEEK_EXPR_ACCESSOR_DECLS(IndexExpr) - ZEEK_EXPR_ACCESSOR_DECLS(InlineExpr) ZEEK_EXPR_ACCESSOR_DECLS(IsExpr) ZEEK_EXPR_ACCESSOR_DECLS(LambdaExpr) ZEEK_EXPR_ACCESSOR_DECLS(ListExpr) ZEEK_EXPR_ACCESSOR_DECLS(NameExpr) - ZEEK_EXPR_ACCESSOR_DECLS(RecordCoerceExpr) - ZEEK_EXPR_ACCESSOR_DECLS(RecordConstructorExpr) ZEEK_EXPR_ACCESSOR_DECLS(RefExpr) - ZEEK_EXPR_ACCESSOR_DECLS(SetConstructorExpr) - ZEEK_EXPR_ACCESSOR_DECLS(TableConstructorExpr) void Describe(ODesc* d) const override final; diff --git a/src/script_opt/Expr.cc b/src/script_opt/Expr.cc index 2b5e4910ee..2f66a20853 100644 --- a/src/script_opt/Expr.cc +++ b/src/script_opt/Expr.cc @@ -2083,7 +2083,8 @@ bool RecordCoerceExpr::WillTransform(Reducer* c) const { return op->Tag() == EXP ExprPtr RecordCoerceExpr::Reduce(Reducer* c, StmtPtr& red_stmt) { if ( WillTransform(c) ) { auto rt = cast_intrusive(type); - auto rc_op = op->AsRecordConstructorExpr(); + ASSERT(op->Tag() == EXPR_RECORD_CONSTRUCTOR); + auto rc_op = static_cast(op.get()); auto known_constr = with_location_of(make_intrusive(rt, rc_op->Op()), this); auto red_e = known_constr->Reduce(c, red_stmt); return TransformMe(std::move(red_e), c, red_stmt);