streamlining of expressions only used for script optimization

This commit is contained in:
Vern Paxson 2024-04-08 18:23:00 -04:00 committed by Tim Wojtulewicz
parent f557b40d14
commit 16b2946fef
2 changed files with 3 additions and 17 deletions

View file

@ -113,28 +113,20 @@ enum ExprTag : int {
extern const char* expr_name(ExprTag t); extern const char* expr_name(ExprTag t);
class AddToExpr; class AddToExpr;
class AnyIndexExpr;
class AssignExpr; class AssignExpr;
class CallExpr; class CallExpr;
class ConstExpr; class ConstExpr;
class EventExpr; class EventExpr;
class FieldAssignExpr; class FieldAssignExpr;
class FieldExpr; class FieldExpr;
class FieldLHSAssignExpr;
class ForExpr; class ForExpr;
class HasFieldExpr; class HasFieldExpr;
class IndexAssignExpr;
class IndexExpr; class IndexExpr;
class InlineExpr;
class IsExpr; class IsExpr;
class LambdaExpr; class LambdaExpr;
class ListExpr; class ListExpr;
class NameExpr; class NameExpr;
class RecordCoerceExpr;
class RecordConstructorExpr;
class RefExpr; class RefExpr;
class SetConstructorExpr;
class TableConstructorExpr;
class Expr; class Expr;
using CallExprPtr = IntrusivePtr<CallExpr>; using CallExprPtr = IntrusivePtr<CallExpr>;
@ -230,34 +222,27 @@ public:
void MarkParen() { paren = true; } void MarkParen() { paren = true; }
bool IsParen() const { return paren; } bool IsParen() const { return paren; }
// These are used by script optimization for AST analysis.
#define ZEEK_EXPR_ACCESSOR_DECLS(ctype) \ #define ZEEK_EXPR_ACCESSOR_DECLS(ctype) \
const ctype* As##ctype() const; \ const ctype* As##ctype() const; \
ctype* As##ctype(); \ ctype* As##ctype(); \
IntrusivePtr<ctype> As##ctype##Ptr(); IntrusivePtr<ctype> As##ctype##Ptr();
ZEEK_EXPR_ACCESSOR_DECLS(AddToExpr) ZEEK_EXPR_ACCESSOR_DECLS(AddToExpr)
ZEEK_EXPR_ACCESSOR_DECLS(AnyIndexExpr)
ZEEK_EXPR_ACCESSOR_DECLS(AssignExpr) ZEEK_EXPR_ACCESSOR_DECLS(AssignExpr)
ZEEK_EXPR_ACCESSOR_DECLS(CallExpr) ZEEK_EXPR_ACCESSOR_DECLS(CallExpr)
ZEEK_EXPR_ACCESSOR_DECLS(ConstExpr) ZEEK_EXPR_ACCESSOR_DECLS(ConstExpr)
ZEEK_EXPR_ACCESSOR_DECLS(EventExpr) ZEEK_EXPR_ACCESSOR_DECLS(EventExpr)
ZEEK_EXPR_ACCESSOR_DECLS(FieldAssignExpr) ZEEK_EXPR_ACCESSOR_DECLS(FieldAssignExpr)
ZEEK_EXPR_ACCESSOR_DECLS(FieldExpr) ZEEK_EXPR_ACCESSOR_DECLS(FieldExpr)
ZEEK_EXPR_ACCESSOR_DECLS(FieldLHSAssignExpr)
ZEEK_EXPR_ACCESSOR_DECLS(ForExpr) ZEEK_EXPR_ACCESSOR_DECLS(ForExpr)
ZEEK_EXPR_ACCESSOR_DECLS(HasFieldExpr) ZEEK_EXPR_ACCESSOR_DECLS(HasFieldExpr)
ZEEK_EXPR_ACCESSOR_DECLS(IndexAssignExpr)
ZEEK_EXPR_ACCESSOR_DECLS(IndexExpr) ZEEK_EXPR_ACCESSOR_DECLS(IndexExpr)
ZEEK_EXPR_ACCESSOR_DECLS(InlineExpr)
ZEEK_EXPR_ACCESSOR_DECLS(IsExpr) ZEEK_EXPR_ACCESSOR_DECLS(IsExpr)
ZEEK_EXPR_ACCESSOR_DECLS(LambdaExpr) ZEEK_EXPR_ACCESSOR_DECLS(LambdaExpr)
ZEEK_EXPR_ACCESSOR_DECLS(ListExpr) ZEEK_EXPR_ACCESSOR_DECLS(ListExpr)
ZEEK_EXPR_ACCESSOR_DECLS(NameExpr) ZEEK_EXPR_ACCESSOR_DECLS(NameExpr)
ZEEK_EXPR_ACCESSOR_DECLS(RecordCoerceExpr)
ZEEK_EXPR_ACCESSOR_DECLS(RecordConstructorExpr)
ZEEK_EXPR_ACCESSOR_DECLS(RefExpr) ZEEK_EXPR_ACCESSOR_DECLS(RefExpr)
ZEEK_EXPR_ACCESSOR_DECLS(SetConstructorExpr)
ZEEK_EXPR_ACCESSOR_DECLS(TableConstructorExpr)
void Describe(ODesc* d) const override final; void Describe(ODesc* d) const override final;

View file

@ -2083,7 +2083,8 @@ bool RecordCoerceExpr::WillTransform(Reducer* c) const { return op->Tag() == EXP
ExprPtr RecordCoerceExpr::Reduce(Reducer* c, StmtPtr& red_stmt) { ExprPtr RecordCoerceExpr::Reduce(Reducer* c, StmtPtr& red_stmt) {
if ( WillTransform(c) ) { if ( WillTransform(c) ) {
auto rt = cast_intrusive<RecordType>(type); auto rt = cast_intrusive<RecordType>(type);
auto rc_op = op->AsRecordConstructorExpr(); ASSERT(op->Tag() == EXPR_RECORD_CONSTRUCTOR);
auto rc_op = static_cast<const RecordConstructorExpr*>(op.get());
auto known_constr = with_location_of(make_intrusive<RecordConstructorExpr>(rt, rc_op->Op()), this); auto known_constr = with_location_of(make_intrusive<RecordConstructorExpr>(rt, rc_op->Op()), this);
auto red_e = known_constr->Reduce(c, red_stmt); auto red_e = known_constr->Reduce(c, red_stmt);
return TransformMe(std::move(red_e), c, red_stmt); return TransformMe(std::move(red_e), c, red_stmt);