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