Spicy
builtin-function.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #include <string>
4 #include <utility>
5 #include <vector>
6 
7 #include <hilti/ast/declarations/parameter.h>
8 #include <hilti/ast/expression.h>
9 #include <hilti/ast/node.h>
10 #include <hilti/ast/type.h>
11 
12 namespace hilti {
13 namespace expression {
14 
17 public:
27  BuiltinFunction(std::string name, std::string cxxname, hilti::Type type,
28  std::vector<declaration::Parameter> parameters, std::vector<Expression> arguments, Meta m = Meta())
29  : NodeBase(nodes(std::move(type), parameters, std::move(arguments)), std::move(m)),
30  _name(std::move(name)),
31  _cxxname(std::move(cxxname)),
32  _num_parameters(parameters.size()) {}
33 
34  auto arguments() const { return childs<Expression>(_num_parameters + 1, -1); }
35  const auto parameters() const { return childs<declaration::Parameter>(1, _num_parameters); }
36  const auto& cxxname() const { return _cxxname; }
37  const auto& name() const { return _name; }
38 
39  void setArguments(std::vector<hilti::Expression> args) {
40  childs().clear();
41 
42  for ( auto& a : args )
43  childs().emplace_back(std::move(a));
44  }
45 
46  friend bool operator==(const BuiltinFunction& lhs, const BuiltinFunction& rhs) {
47  return lhs._cxxname == rhs._cxxname && lhs.type() == rhs.type() && lhs.parameters() == rhs.parameters() &&
48  lhs.arguments() == rhs.arguments();
49  }
50 
52  const Type& type() const { return child<hilti::Type>(0); };
54  bool isConstant() const { return false; }
56  auto isEqual(const Expression& other) const { return node::isEqual(this, other); }
58  auto isLhs() const { return false; }
60  auto isTemporary() const { return true; }
62  auto properties() const { return node::Properties{{"name", _name}}; }
63 
64 private:
65  std::string _name;
66  std::string _cxxname;
67  size_t _num_parameters = 0;
68 };
69 
70 } // namespace expression
71 } // namespace hilti
Definition: builtin-function.h:16
const Type & type() const
Definition: builtin-function.h:52
Definition: optional.h:79
auto properties() const
Definition: builtin-function.h:62
Definition: expression.h:17
Definition: meta.h:18
Definition: type.h:159
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:99
BuiltinFunction(std::string name, std::string cxxname, hilti::Type type, std::vector< declaration::Parameter > parameters, std::vector< Expression > arguments, Meta m=Meta())
Definition: builtin-function.h:27
auto isEqual(const Expression &other) const
Definition: builtin-function.h:56
auto isLhs() const
Definition: builtin-function.h:58
const auto & childs() const
Definition: node.h:470
auto isTemporary() const
Definition: builtin-function.h:60
bool isConstant() const
Definition: builtin-function.h:54
Definition: node.h:358