9 #include <hilti/ast/declaration.h> 10 #include <hilti/ast/expression.h> 11 #include <hilti/ast/id.h> 12 #include <hilti/ast/type.h> 13 #include <hilti/ast/types/unknown.h> 16 namespace declaration {
24 GlobalVariable(
ID id, ::hilti::Type type, std::optional<hilti::Expression> init = {},
26 :
NodeBase(nodes(std::move(
id), std::move(type), std::move(init)), std::move(m)), _linkage(linkage) {}
28 GlobalVariable(
ID id, ::hilti::Type type, std::vector<hilti::Expression> args,
29 std::optional<hilti::Expression> init = {}, Linkage linkage = Linkage::Private,
Meta m =
Meta())
30 :
NodeBase(nodes(std::move(
id), std::move(type), std::move(init), std::move(args)), std::move(m)),
34 :
NodeBase(nodes(std::move(
id),
node::none, std::move(init)), std::move(m)), _linkage(linkage) {}
36 auto init()
const {
return childs()[2].tryReferenceAs<hilti::Expression>(); }
37 auto typeArguments()
const {
return childs<hilti::Expression>(3, -1); }
39 ::hilti::Type type()
const {
40 if (
auto t =
childs()[1].tryAs<::hilti::Type>(); t && *t != type::unknown )
41 return type::effectiveType(std::move(*t));
43 if (
auto i = init() )
56 return id() == other.
id() && type() == other.type() && init() == other.init();
62 const ID&
id()
const {
return child<ID>(0); }
64 Linkage
linkage()
const {
return _linkage; }
66 std::string
displayName()
const {
return "global variable"; };
68 auto isEqual(
const Declaration& other)
const {
return node::isEqual(
this, other); }
113 for (
auto&& a : args )
114 x.childs().emplace_back(std::move(a));
auto & childs() const
Definition: node.h:445
std::vector< T > childs(int begin, int end) const
Definition: node.h:373
const Node none
Definition: node.cc:12
static Declaration setInit(const GlobalVariable &d, const hilti::Expression &i)
Definition: global-variable.h:97
auto properties() const
Definition: global-variable.h:71
std::string displayName() const
Definition: global-variable.h:66
bool isConstant() const
Definition: global-variable.h:60
auto isEqual(const Declaration &other) const
Definition: global-variable.h:68
const ID & id() const
Definition: global-variable.h:62
static Declaration setType(const GlobalVariable &d, std::optional< hilti::Type > t)
Definition: global-variable.h:80
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:83
auto hasAutomaticType() const
Definition: global-variable.h:53
Definition: declaration.h:15
Linkage linkage() const
Definition: global-variable.h:64
static Declaration setTypeArguments(const GlobalVariable &d, std::vector< hilti::Expression > args)
Definition: global-variable.h:110
Definition: global-variable.h:19