9 #include <hilti/ast/declaration.h>
10 #include <hilti/ast/declarations/expression.h>
11 #include <hilti/ast/expression.h>
12 #include <hilti/ast/type.h>
14 namespace hilti::declaration {
19 auto type()
const {
return child<QualifiedType>(0); }
20 auto init()
const {
return child<hilti::Expression>(1); }
21 auto typeArguments()
const {
return children<hilti::Expression>(2, {}); }
26 void setTypeArguments(
ASTContext* ctx, Expressions args) {
31 std::string_view
displayName() const final {
return "global variable"; }
35 return ctx->
make<GlobalVariable>(ctx, node::flatten(type->
recreateAsLhs(ctx), init, std::move(args)),
39 static auto create(ASTContext* ctx, ID
id, QualifiedType* type,
hilti::Expression* init =
nullptr,
40 declaration::Linkage
linkage = Linkage::Private, Meta
meta = {}) {
41 return create(ctx, std::move(
id), type->recreateAsLhs(ctx), {}, init,
linkage, std::move(
meta));
44 static auto create(ASTContext* ctx, ID
id, QualifiedType* type, declaration::Linkage
linkage = Linkage::Private,
46 return create(ctx, std::move(
id), type->recreateAsLhs(ctx), {},
nullptr,
linkage, std::move(
meta));
50 const Meta&
meta = {}) {
54 static auto create(ASTContext* ctx, ID
id, declaration::Linkage
linkage = Linkage::Private,
const Meta&
meta = {}) {
59 GlobalVariable(ASTContext* ctx, Nodes
children, ID
id, declaration::Linkage
linkage, Meta
meta)
62 HILTI_NODE_1(declaration::GlobalVariable, Declaration,
final);
Definition: ast-context.h:121
T * make(Args &&... args)
Definition: ast-context.h:366
Definition: declaration.h:48
const auto & id() const
Definition: declaration.h:53
auto linkage() const
Definition: declaration.h:56
Definition: expression.h:15
void setChild(ASTContext *ctx, size_t idx, Node *n)
Definition: node.h:602
const auto & children() const
Definition: node.h:364
const auto & meta() const
Definition: node.h:306
void removeChildren(int begin, std::optional< int > end)
Definition: node.h:575
void addChildren(ASTContext *ctx, const Nodes &children)
Definition: node.h:545
auto recreateAsLhs(ASTContext *ctx) const
Definition: type.h:496
static QualifiedType * createAuto(ASTContext *ctx, const Meta &m=Meta())
Definition: type.cc:121
Definition: global-variable.h:17
std::string_view displayName() const final
Definition: global-variable.h:31
void init()
Definition: init.cc:21