8 #include <hilti/ast/expression.h> 9 #include <hilti/ast/expressions/unresolved-operator.h> 10 #include <hilti/ast/node.h> 11 #include <hilti/ast/operator.h> 12 #include <hilti/ast/types/unresolved-id.h> 20 namespace expression {
21 namespace resolved_operator {
23 #include <hilti/autogen/__resolved-operator.h> 25 inline Node to_node(ResolvedOperator t) {
return Node(std::move(t)); }
27 inline std::ostream& operator<<(std::ostream& out, ResolvedOperator i) {
return out << to_node(std::move(i)); }
32 using ResolvedOperator = resolved_operator::detail::ResolvedOperator;
33 using resolved_operator::detail::to_node;
45 childs()[0] = type::pruneWalk(op.result(childs<Expression>(1, -1)));
48 const auto& operator_()
const {
return _operator; }
49 auto kind()
const {
return _operator.kind(); }
52 auto operands()
const {
return childs<Expression>(1, -1); }
53 const auto& result()
const {
return child<Type>(0); }
54 const auto& op0()
const {
return child<Expression>(1); }
55 const auto& op1()
const {
return child<Expression>(2); }
56 const auto& op2()
const {
return child<Expression>(3); }
57 auto hasOp0()
const {
return ! childs().empty(); }
58 auto hasOp1()
const {
return childs().size() >= 3; }
59 auto hasOp2()
const {
return childs().size() >= 4; }
60 void setOp0(
const Expression& e) { childs()[1] = e; }
61 void setOp1(
const Expression& e) { childs()[2] = e; }
62 void setOp2(
const Expression& e) { childs()[3] = e; }
64 bool operator==(
const ResolvedOperator& other)
const {
65 return operator_() == other.operator_() && operands() == other.operands();
69 bool isLhs()
const {
return operator_().isLhs(); }
75 auto isEqual(
const Expression& other)
const {
return node::isEqual(
this, other); }
78 bool isConstant()
const {
return type::isConstant(type()); }
84 ::hilti::operator_::detail::Operator _operator;
87 namespace resolved_operator {
96 inline hilti::Expression setOp0(
const expression::ResolvedOperator& r, Expression e) {
97 auto x = r._clone().as<expression::ResolvedOperator>();
98 x.setOp0(std::move(e));
109 inline hilti::Expression setOp1(
const expression::ResolvedOperator& r, Expression e) {
110 auto x = r._clone().as<expression::ResolvedOperator>();
111 x.setOp1(std::move(e));
122 inline hilti::Expression setOp2(
const expression::ResolvedOperator& r, Expression e) {
123 auto x = r._clone().as<expression::ResolvedOperator>();
124 x.setOp2(std::move(e));
const Node none
Definition: node.cc:14
auto isEqual(const Expression &other) const
Definition: resolved-operator.h:75
bool isTemporary() const
Definition: resolved-operator.h:71
Definition: expression.h:17
auto properties() const
Definition: resolved-operator.h:81
Definition: resolved-operator.h:40
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:99
bool isLhs() const
Definition: resolved-operator.h:69
bool isConstant() const
Definition: resolved-operator.h:78
const Type & type() const
Definition: resolved-operator.h:73
Definition: resolved-operator.h:17