Spicy
unit-hook.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 
9 #include <spicy/ast/declarations/hook.h>
10 
11 namespace spicy::declaration {
12 
14 class UnitHook : public Declaration {
15 public:
16  auto hook() const { return child<declaration::Hook>(0); }
17 
18  std::string_view displayName() const final { return "unit hook"; }
19 
20  static auto create(ASTContext* ctx, const ID& id, declaration::Hook* hook, Meta meta = {}) {
21  auto* h = ctx->make<UnitHook>(ctx, {hook}, id, std::move(meta));
22  h->hook()->setID(id);
23  return h;
24  }
25 
26 protected:
27  UnitHook(ASTContext* ctx, Nodes children, ID id, Meta meta)
28  : Declaration(ctx,
29  NodeTags,
30  std::move(children),
31  std::move(id),
32  hilti::declaration::Linkage::Private,
33  std::move(meta)) {}
34 
35  SPICY_NODE_1(declaration::UnitHook, Declaration, final);
36 };
37 
38 } // namespace spicy::declaration
Definition: ast-context.h:128
T * make(Args &&... args)
Definition: ast-context.h:382
Definition: declaration.h:53
const auto & id() const
Definition: declaration.h:58
Definition: id.h:15
Definition: meta.h:30
const auto & children() const
Definition: node.h:382
const auto & meta() const
Definition: node.h:324
Definition: hook.h:61
Definition: unit-hook.h:14
std::string_view displayName() const final
Definition: unit-hook.h:18