Spicy
function.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <string>
6 #include <utility>
7 
8 #include <hilti/ast/function.h>
9 #include <hilti/ast/id.h>
10 #include <hilti/ast/statement.h>
11 
12 namespace hilti {
13 namespace declaration {
14 
17 public:
18  Function(::hilti::Function function, Linkage linkage = Linkage::Private, Meta m = Meta())
19  : NodeBase({std::move(function)}, std::move(m)), _linkage(linkage) {}
20 
21  const auto& function() const { return child<::hilti::Function>(0); }
22 
23  bool operator==(const Function& other) const { return id() == other.id() && function() == other.function(); }
24 
26  bool isConstant() const { return true; }
28  ID id() const { return function().id(); }
30  Linkage linkage() const { return _linkage; }
32  std::string displayName() const { return "function"; };
34  auto isEqual(const Declaration& other) const { return node::isEqual(this, other); }
35 
37  auto properties() const { return node::Properties{{"linkage", to_string(_linkage)}}; }
38 
46  static Declaration setBody(const Function& d, const Statement& b) {
47  auto x = Declaration(d)._clone().as<Function>();
48  x.childs()[0] = hilti::Function::setBody(x.childs()[0].as<::hilti::Function>(), b);
49  return x;
50  }
51 
52 private:
53  Linkage _linkage;
54 };
55 
56 } // namespace declaration
57 } // namespace hilti
std::vector< T > childs(int begin, int end) const
Definition: node.h:373
static Function setBody(const Function &d, const Statement &b)
Definition: function.h:75
ID id() const
Definition: function.h:28
Definition: function.h:16
Definition: function.h:44
Definition: meta.h:18
bool isConstant() const
Definition: function.h:26
static Declaration setBody(const Function &d, const Statement &b)
Definition: function.h:46
auto properties() const
Definition: function.h:37
auto isEqual(const Declaration &other) const
Definition: function.h:34
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:83
std::string displayName() const
Definition: function.h:32
Definition: declaration.h:15
Linkage linkage() const
Definition: function.h:30
Definition: id.h:18
Definition: node.h:318