8 #include <hilti/ast/attribute.h> 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/auto.h> 14 #include <hilti/ast/types/unknown.h> 17 namespace declaration {
30 constexpr util::enum_::Value<Kind> kinds[] = {
31 {Kind::Unknown,
"unknown"},
34 {Kind::InOut,
"inout"},
38 constexpr
auto to_string(Kind k) {
return util::enum_::to_string(k, detail::kinds); }
41 constexpr
auto from_string(
const std::string_view& s) {
return util::enum_::from_string<Kind>(s, detail::kinds); }
50 std::optional<AttributeSet> attrs,
Meta m =
Meta())
51 :
DeclarationBase(nodes(std::move(
id), type::nonConstant(std::move(type)), std::move(default_),
57 bool is_type_param, std::optional<AttributeSet> attrs,
Meta m =
Meta())
58 :
DeclarationBase(nodes(std::move(
id), type::nonConstant(std::move(type)), std::move(default_),
62 _is_type_param(is_type_param) {}
66 auto attributes()
const {
return children()[3].tryAs<
AttributeSet>(); }
67 auto default_()
const {
return children()[2].tryAs<hilti::Expression>(); }
68 auto kind()
const {
return _kind; }
69 const auto& type()
const {
return child<hilti::Type>(1); }
70 auto isTypeParameter()
const {
return _is_type_param; }
71 auto isResolved(type::ResolvedState* rstate)
const {
return type::detail::isResolved(type(), rstate); }
73 void setDefault(hilti::Expression e) { children()[2] = std::move(e); }
74 void setIsTypeParameter() { _is_type_param =
true; }
75 void setType(
hilti::Type t) { children()[1] = std::move(t); }
77 bool operator==(
const Parameter& other)
const {
78 return id() == other.
id() && type() == other.type() && kind() == other.kind() && default_() == other.default_();
82 bool isConstant()
const {
return _kind == parameter::Kind::In; }
84 const ID&
id()
const {
return child<ID>(0); }
86 Linkage
linkage()
const {
return Linkage::Private; }
96 parameter::Kind _kind = parameter::Kind::Unknown;
97 bool _is_type_param =
false;
102 if ( p1.kind() != p2.kind() || p1.default_() != p2.default_() )
108 if ( auto1 || auto2 )
111 return p1.type() == p2.type();
Definition: declaration.h:53
const Node none
Definition: node.cc:14
bool isConstant() const
Definition: parameter.h:82
Definition: attribute.h:145
Definition: declaration.h:87
Definition: parameter.h:47
auto isEqual(const Declaration &other) const
Definition: parameter.h:90
const ID & id() const
Definition: parameter.h:84
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:99
auto properties() const
Definition: parameter.h:93
Linkage linkage() const
Definition: parameter.h:86
std::string displayName() const
Definition: parameter.h:88