Spicy
unresolved-operator.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <algorithm>
6 #include <utility>
7 #include <vector>
8 
9 #include <hilti/ast/expression.h>
10 #include <hilti/ast/operator.h>
11 #include <hilti/ast/types/auto.h>
12 
13 namespace hilti::expression {
14 
17 public:
18  UnresolvedOperator(operator_::Kind op, std::vector<Expression> operands, Meta meta = Meta())
19  : NodeBase(nodes(type::auto_, std::move(operands)), std::move(meta)), _kind(op) {}
20 
21  UnresolvedOperator(operator_::Kind op, hilti::node::Range<Expression> operands, Meta meta = Meta())
22  : NodeBase(nodes(type::auto_, operands), std::move(meta)), _kind(op) {}
23 
24  auto kind() const { return _kind; }
25 
26  bool areOperandsResolved() const { return expression::isResolved(children<Expression>(1, -1)); }
27 
28  bool operator==(const UnresolvedOperator& other) const {
29  return kind() == other.kind() && operands() == other.operands();
30  }
31 
33  hilti::node::Range<Expression> operands() const { return children<Expression>(1, -1); }
34 
35  // Dummy implementations as the node will be rejected in validation anyway.
36 
38  bool isLhs() const { return false; }
40  bool isTemporary() const { return false; }
42  const auto& type() const { return child<Type>(0); }
44  auto isConstant() const { return false; }
46  auto isEqual(const Expression& other) const { return node::isEqual(this, other); }
47 
49  auto properties() const { return node::Properties{{"kind", to_string(_kind)}}; }
50 
51 private:
52  operator_::Kind _kind;
53 };
54 
55 } // namespace hilti::expression
Definition: node.h:38
auto isConstant() const
Definition: unresolved-operator.h:44
hilti::node::Range< Expression > operands() const
Definition: unresolved-operator.h:33
Definition: unresolved-operator.h:16
Definition: expression.h:18
Definition: meta.h:19
const auto & type() const
Definition: unresolved-operator.h:42
bool isTemporary() const
Definition: unresolved-operator.h:40
auto isEqual(const Expression &other) const
Definition: unresolved-operator.h:46
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:98
bool isLhs() const
Definition: unresolved-operator.h:38
auto properties() const
Definition: unresolved-operator.h:49
auto & meta() const
Definition: node.h:476
Definition: node.h:360
Definition: expression.h:21