8 #include <hilti/ast/ast-context.h>
9 #include <hilti/ast/forward.h>
10 #include <hilti/ast/id.h>
11 #include <hilti/ast/node.h>
15 namespace declaration {
29 constexpr util::enum_::Value<Linkage> Linkages[] = {
30 {.value = Linkage::Export, .name =
"exported"},
31 {.value = Linkage::Init, .name =
"init"},
32 {.value = Linkage::PreInit, .name =
"preinit"},
33 {.value = Linkage::Private, .name =
"private"},
34 {.value = Linkage::Public, .name =
"public"},
35 {.value = Linkage::Struct, .name =
"struct"},
40 constexpr
auto to_string(Linkage f) {
return util::enum_::to_string(f, detail::Linkages); }
48 constexpr
auto from_string(std::string_view s) {
return util::enum_::from_string<Linkage>(s, detail::Linkages); }
58 const auto&
id()
const {
return _id; }
65 return _linkage == declaration::Linkage::Public || _linkage == declaration::Linkage::Export;
96 _fqid = {}, _canonical_id = {};
127 auto p = node::Properties{{
"id", _id},
128 {
"linkage", declaration::to_string(_linkage)},
129 {
"declaration", to_string(_declaration_index)},
131 {
"canonical-id", _canonical_id}};
138 _linkage = other._linkage;
142 Declaration(Declaration&& other) =
default;
144 Declaration& operator=(
const Declaration& other) =
delete;
145 Declaration& operator=(Declaration&& other) =
delete;
148 friend class ASTContext;
150 Declaration(ASTContext* ctx,
151 node::Tags node_tags,
159 void setDeclarationIndex(ast::DeclarationIndex index) {
161 _declaration_index = index;
164 std::string
_dump()
const override;
166 HILTI_NODE_0(Declaration,
override);
170 declaration::Linkage _linkage;
172 ast::DeclarationIndex _declaration_index;
Definition: declaration.h:53
void setLinkage(declaration::Linkage linkage)
Definition: declaration.h:100
auto isPublic() const
Definition: declaration.h:64
const auto & canonicalID() const
Definition: declaration.h:82
void setCanonicalID(ID id)
Definition: declaration.h:116
auto declarationIndex() const
Definition: declaration.h:88
node::Properties properties() const override
Definition: declaration.h:126
void setID(const ID &id)
Definition: declaration.h:94
void setFullyQualifiedID(ID id)
Definition: declaration.h:108
const auto & fullyQualifiedID() const
Definition: declaration.h:73
const auto & id() const
Definition: declaration.h:58
std::string _dump() const override
Definition: declaration.cc:10
virtual std::string_view displayName() const =0
auto linkage() const
Definition: declaration.h:61
const auto & children() const
Definition: node.h:382
const auto & meta() const
Definition: node.h:324
Node(ASTContext *ctx, node::Tags node_tags, Nodes children, Meta meta)
Definition: node.h:984
virtual node::Properties properties() const
Definition: node.h:953