Spicy
module.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/declaration.h>
9 #include <hilti/ast/expression.h>
10 #include <hilti/ast/id.h>
11 #include <hilti/ast/meta.h>
12 #include <hilti/ast/module.h>
13 #include <hilti/ast/node.h>
14 #include <hilti/ast/node_ref.h>
15 #include <hilti/base/result.h>
16 #include <hilti/base/type_erase.h>
17 
18 namespace hilti {
19 namespace declaration {
20 
23 public:
29  Module(NodeRef root, Meta m = Meta()) : NodeBase(std::move(m)), _root(std::move(root)) {
30  assert(_root && _root->isA<hilti::Module>());
31  }
32 
33  Node& root() const { return *_root; }
34 
35  bool operator==(const Module& other) const { return id() == other.id(); }
36 
38  bool isConstant() const { return true; }
40  ID id() const { return _root->as<hilti::Module>().id(); }
42  Linkage linkage() const { return Linkage::Public; }
44  std::string displayName() const { return "module"; };
46  auto isEqual(const Declaration& other) const { return node::isEqual(this, other); }
47 
49  auto properties() const { return node::Properties{{"id", id()}}; }
50 
51 private:
52  NodeRef _root;
53 };
54 
55 } // namespace declaration
56 } // namespace hilti
auto properties() const
Definition: module.h:49
Definition: module.h:22
Linkage linkage() const
Definition: module.h:42
Module(NodeRef root, Meta m=Meta())
Definition: module.h:29
auto isEqual(const Declaration &other) const
Definition: module.h:46
Definition: optional.h:79
Definition: meta.h:18
ID id() const
Definition: module.h:40
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:83
Definition: module.h:20
Definition: node.h:97
Definition: node_ref.h:44
Definition: declaration.h:15
std::string displayName() const
Definition: module.h:44
bool isConstant() const
Definition: module.h:38
Definition: id.h:18
Definition: node.h:318