mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
unify functionality across EqExpr and RelExpr classes
This commit is contained in:
parent
1b838ca91d
commit
d15d4a6e08
3 changed files with 138 additions and 48 deletions
24
src/Expr.h
24
src/Expr.h
|
@ -822,14 +822,28 @@ public:
|
|||
ExprPtr Reduce(Reducer* c, StmtPtr& red_stmt) override;
|
||||
};
|
||||
|
||||
class EqExpr final : public BinaryExpr {
|
||||
// Intermediary class for comparison operators. Not directly instantiated.
|
||||
class CmpExpr : public BinaryExpr {
|
||||
protected:
|
||||
CmpExpr(ExprTag tag, ExprPtr op1, ExprPtr op2);
|
||||
|
||||
void Canonicalize() override;
|
||||
|
||||
bool WillTransform(Reducer* c) const override;
|
||||
bool WillTransformInConditional(Reducer* c) const override;
|
||||
bool IsReduced(Reducer* c) const override;
|
||||
ExprPtr TransformToConditional(Reducer* c, StmtPtr& red_stmt) override;
|
||||
|
||||
bool IsHasElementsTest() const;
|
||||
ExprPtr BuildHasElementsTest() const;
|
||||
};
|
||||
|
||||
class EqExpr final : public CmpExpr {
|
||||
public:
|
||||
EqExpr(ExprTag tag, ExprPtr op1, ExprPtr op2);
|
||||
void Canonicalize() override;
|
||||
|
||||
// Optimization-related:
|
||||
ExprPtr Duplicate() override;
|
||||
bool WillTransform(Reducer* c) const override;
|
||||
ExprPtr Reduce(Reducer* c, StmtPtr& red_stmt) override;
|
||||
bool InvertSense() override;
|
||||
|
||||
|
@ -837,14 +851,12 @@ protected:
|
|||
ValPtr Fold(Val* v1, Val* v2) const override;
|
||||
};
|
||||
|
||||
class RelExpr final : public BinaryExpr {
|
||||
class RelExpr final : public CmpExpr {
|
||||
public:
|
||||
RelExpr(ExprTag tag, ExprPtr op1, ExprPtr op2);
|
||||
void Canonicalize() override;
|
||||
|
||||
// Optimization-related:
|
||||
ExprPtr Duplicate() override;
|
||||
bool WillTransform(Reducer* c) const override;
|
||||
ExprPtr Reduce(Reducer* c, StmtPtr& red_stmt) override;
|
||||
bool InvertSense() override;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue