8 #include <hilti/ast/declaration.h> 9 #include <hilti/ast/expression.h> 10 #include <hilti/ast/id.h> 11 #include <hilti/ast/types/unknown.h> 14 namespace declaration {
19 Constant(
ID id, ::hilti::Type type, hilti::Expression value = {}, Linkage
linkage = Linkage::Private,
21 :
NodeBase(nodes(std::move(
id), std::move(type), std::move(value)), std::move(m)), _linkage(linkage) {}
23 Constant(
ID id, hilti::Expression value, Linkage linkage = Linkage::Private,
Meta m =
Meta())
24 :
NodeBase({std::move(
id),
node::none, std::move(value)}, std::move(m)), _linkage(linkage) {}
26 const auto& value()
const {
return child<hilti::Expression>(2); }
28 ::hilti::Type type()
const {
29 if (
auto t =
childs()[1].tryAs<::hilti::Type>(); t && *t != type::unknown )
30 return type::effectiveType(std::move(*t));
32 return value().type();
40 bool operator==(
const Constant& other)
const {
return id() == other.
id() && value() == other.value(); }
45 const ID&
id()
const {
return child<ID>(0); }
47 Linkage
linkage()
const {
return _linkage; }
51 auto isEqual(
const Declaration& other)
const {
return node::isEqual(
this, other); }
64 auto x = Declaration(d)._clone().as<
Constant>();
auto & childs() const
Definition: node.h:445
const ID & id() const
Definition: constant.h:45
std::vector< T > childs(int begin, int end) const
Definition: node.h:373
auto hasAutomaticType() const
Definition: constant.h:38
const Node none
Definition: node.cc:12
static Declaration setValue(const Constant &d, const hilti::Expression &i)
Definition: constant.h:63
std::string displayName() const
Definition: constant.h:49
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:83
auto properties() const
Definition: constant.h:54
Linkage linkage() const
Definition: constant.h:47
auto isEqual(const Declaration &other) const
Definition: constant.h:51
Definition: constant.h:17
bool isConstant() const
Definition: constant.h:43
Definition: declaration.h:15