Add RelationalExpression helpers.

This CL adds helper methods to the RelationalExpression to determine the
type of relation.

Bug: tint:5
Change-Id: I232c3a2e9f27a7efb91735516ee7e9cfc97882ae
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/18825
Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
dan sinclair 2020-04-06 19:55:33 +00:00 committed by dan sinclair
parent 3ffec80c63
commit d0479d22ea
1 changed files with 44 additions and 1 deletions

View File

@ -48,7 +48,7 @@ enum class Relation {
kModulo, kModulo,
}; };
/// An xor expression /// A Relational Expression
class RelationalExpression : public Expression { class RelationalExpression : public Expression {
public: public:
/// Constructor /// Constructor
@ -79,6 +79,49 @@ class RelationalExpression : public Expression {
/// @returns the relation /// @returns the relation
Relation relation() const { return relation_; } Relation relation() const { return relation_; }
/// @returns true if the relation is and
bool IsAnd() const { return relation_ == Relation::kAnd; }
/// @returns true if the relation is or
bool IsOr() const { return relation_ == Relation::kOr; }
/// @returns true if the relation is xor
bool IsXor() const { return relation_ == Relation::kXor; }
/// @returns true if the relation is logical and
bool IsLogicalAnd() const { return relation_ == Relation::kLogicalAnd; }
/// @returns true if the relation is logical or
bool IsLogicalOr() const { return relation_ == Relation::kLogicalOr; }
/// @returns true if the relation is equal
bool IsEqual() const { return relation_ == Relation::kEqual; }
/// @returns true if the relation is not equal
bool IsNotEqual() const { return relation_ == Relation::kNotEqual; }
/// @returns true if the relation is less than
bool IsLessThan() const { return relation_ == Relation::kLessThan; }
/// @returns true if the relation is greater than
bool IsGreaterThan() const { return relation_ == Relation::kGreaterThan; }
/// @returns true if the relation is less than equal
bool IsLessThanEqual() const { return relation_ == Relation::kLessThanEqual; }
/// @returns true if the relation is greater than equal
bool IsGreaterThanEqual() const {
return relation_ == Relation::kGreaterThanEqual;
}
/// @returns true if the relation is shift left
bool IsShiftLeft() const { return relation_ == Relation::kShiftLeft; }
/// @returns true if the relation is shift right
bool IsShiftRight() const { return relation_ == Relation::kShiftRight; }
/// @returns true if the relation is shift right arith
bool IsShiftRightArith() const {
return relation_ == Relation::kShiftRightArith;
}
/// @returns true if the relation is add
bool IsAdd() const { return relation_ == Relation::kAdd; }
/// @returns true if the relation is subtract
bool IsSubtract() const { return relation_ == Relation::kSubtract; }
/// @returns true if the relation is multiply
bool IsMultiply() const { return relation_ == Relation::kMultiply; }
/// @returns true if the relation is divide
bool IsDivide() const { return relation_ == Relation::kDivide; }
/// @returns true if the relation is modulo
bool IsModulo() const { return relation_ == Relation::kModulo; }
/// Sets the left side of the expression /// Sets the left side of the expression
/// @param lhs the left side to set /// @param lhs the left side to set
void set_lhs(std::unique_ptr<Expression> lhs) { lhs_ = std::move(lhs); } void set_lhs(std::unique_ptr<Expression> lhs) { lhs_ = std::move(lhs); }