Spicy
logical-not.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <utility>
6 
7 #include <hilti/ast/expression.h>
8 #include <hilti/ast/types/bool.h>
9 
10 namespace hilti {
11 namespace expression {
12 
14 class LogicalNot : public NodeBase, public trait::isExpression {
15 public:
16  LogicalNot(Expression e, Meta m = Meta()) : NodeBase({std::move(e)}, std::move(m)) {}
17 
18  const auto& expression() const { return child<Expression>(0); }
19 
20  bool operator==(const LogicalNot& other) const { return expression() == other.expression(); }
21 
23  bool isLhs() const { return false; }
25  bool isTemporary() const { return true; }
27  auto type() const { return type::Bool(); }
29  auto isConstant() const { return expression().isConstant(); }
31  auto isEqual(const Expression& other) const { return node::isEqual(this, other); }
32 
34  auto properties() const { return node::Properties{}; }
35 
43  static Expression setExpression(const LogicalNot& e, const Expression& op) {
44  auto x = Expression(e)._clone().as<LogicalNot>();
45  x.childs()[0] = op;
46  return x;
47  }
48 };
49 
50 } // namespace expression
51 } // namespace hilti
auto type() const
Definition: logical-not.h:27
std::vector< T > childs(int begin, int end) const
Definition: node.h:373
Definition: logical-not.h:14
bool isLhs() const
Definition: logical-not.h:23
auto isEqual(const Expression &other) const
Definition: logical-not.h:31
Definition: expression.h:16
auto isConstant() const
Definition: logical-not.h:29
Definition: meta.h:18
static Expression setExpression(const LogicalNot &e, const Expression &op)
Definition: logical-not.h:43
auto properties() const
Definition: logical-not.h:34
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:83
Definition: bool.h:13
bool isTemporary() const
Definition: logical-not.h:25
Definition: node.h:318