Spicy
function.h
1 // Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <memory>
6 #include <string>
7 #include <utility>
8 #include <vector>
9 
10 #include <hilti/ast/declaration.h>
11 #include <hilti/ast/declarations/type.h>
12 #include <hilti/ast/function.h>
13 #include <hilti/ast/node-range.h>
14 #include <hilti/ast/operator-registry.h>
15 #include <hilti/ast/operator.h>
16 #include <hilti/ast/types/type.h>
17 
18 namespace hilti::declaration {
19 
21 class Function : public Declaration {
22 public:
23  auto function() const { return child<::hilti::Function>(0); }
24 
26  auto operator_() const { return _operator; }
27 
34  auto linkedDeclarationIndex() const { return _linked_declaration_index; }
35 
40  auto linkedPrototypeIndex() const { return _linked_prototype_index; }
41 
42  void setOperator(const Operator* op) { _operator = op; }
43 
44  void setLinkedDeclarationIndex(ast::DeclarationIndex index) {
45  assert(index);
46  _linked_declaration_index = index;
47  }
48 
49  void setLinkedPrototypeIndex(ast::DeclarationIndex index) {
50  assert(index);
51  _linked_prototype_index = index;
52  }
53 
54  std::string_view displayName() const final { return "function"; }
55 
56  node::Properties properties() const final;
57 
58  static Function* create(ASTContext* ctx, hilti::Function* function, declaration::Linkage linkage = Linkage::Private,
59  Meta meta = {}) {
60  return ctx->make<Function>(ctx, {function}, function->id(), linkage, std::move(meta));
61  }
62 
63 protected:
64  Function(ASTContext* ctx, Nodes children, ID id, declaration::Linkage linkage, Meta meta)
65  : Declaration(ctx, NodeTags, std::move(children), std::move(id), linkage, std::move(meta)) {}
66 
67  HILTI_NODE_1(declaration::Function, Declaration, final);
68 
69 private:
70  const Operator* _operator = nullptr;
71 
72  ast::DeclarationIndex _linked_declaration_index;
73  ast::DeclarationIndex _linked_prototype_index;
74 };
75 
76 } // namespace hilti::declaration
Definition: ast-context.h:121
Definition: declaration.h:47
const auto & id() const
Definition: declaration.h:52
auto linkage() const
Definition: declaration.h:55
Definition: function.h:45
Definition: meta.h:30
const auto & children() const
Definition: node.h:363
const auto & meta() const
Definition: node.h:305
Definition: operator.h:269
Definition: ast-context.h:54
Definition: function.h:21
auto linkedDeclarationIndex() const
Definition: function.h:34
auto linkedPrototypeIndex() const
Definition: function.h:40
std::string_view displayName() const final
Definition: function.h:54
auto operator_() const
Definition: function.h:26
node::Properties properties() const final
Definition: function.cc:12