11 #include <hilti/ast/declaration.h>
12 #include <hilti/ast/expression.h>
13 #include <hilti/ast/type.h>
15 namespace hilti::declaration {
20 auto value()
const {
return child<hilti::Expression>(1); }
23 if (
auto* t = child<QualifiedType>(0) )
26 return value()->type();
29 std::string_view
displayName() const final {
return "constant"; }
37 declaration::Linkage
linkage = Linkage::Private,
39 QualifiedType* t = type;
44 return ctx->
make<Constant>(ctx, {t, value}, std::move(
id),
linkage, std::move(
meta));
47 static auto create(ASTContext* ctx,
50 declaration::Linkage
linkage = Linkage::Private,
52 return create(ctx, std::move(
id), {}, value,
linkage, std::move(
meta));
58 assert(!
child(0) ||
child(0)->as<QualifiedType>()->isConstant());
61 HILTI_NODE_1(declaration::Constant, Declaration,
final);
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
auto linkage() const
Definition: declaration.h:61
Definition: expression.h:15
void setChild(ASTContext *ctx, size_t idx, Node *n)
Definition: node.h:631
const auto & children() const
Definition: node.h:382
const auto & meta() const
Definition: node.h:324
T * child(int i) const
Definition: node.h:393
auto recreateAsConst(ASTContext *ctx) const
Definition: type.h:516
Definition: constant.h:18
std::string_view displayName() const final
Definition: constant.h:29