mirror of
https://github.com/zeek/zeek.git
synced 2025-10-06 08:38:20 +00:00
streamlining of expressions only used for script optimization
This commit is contained in:
parent
f557b40d14
commit
16b2946fef
2 changed files with 3 additions and 17 deletions
17
src/Expr.h
17
src/Expr.h
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue