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> 29 constexpr util::enum_::Value<Kind> kinds[] = {
30 {Kind::Unknown,
"unknown"},
33 {Kind::InOut,
"inout"},
37 constexpr
auto to_string(Kind k) {
return util::enum_::to_string(k, detail::kinds); }
40 constexpr
auto from_string(
const std::string_view& s) {
return util::enum_::from_string<Kind>(s, detail::kinds); }
49 std::optional<AttributeSet> attrs,
Meta m =
Meta())
50 :
DeclarationBase(nodes(std::move(
id), type::nonConstant(std::move(type)), std::move(default_),
56 bool is_type_param, std::optional<AttributeSet> attrs,
Meta m =
Meta())
57 :
DeclarationBase(nodes(std::move(
id), type::nonConstant(std::move(type)), std::move(default_),
61 _is_type_param(is_type_param) {}
65 auto attributes()
const {
return children()[3].tryAs<
AttributeSet>(); }
66 auto default_()
const {
return children()[2].tryAs<hilti::Expression>(); }
67 auto kind()
const {
return _kind; }
68 const auto& type()
const {
return child<hilti::Type>(1); }
69 auto isTypeParameter()
const {
return _is_type_param; }
70 auto isResolved(type::ResolvedState* rstate)
const {
return type::detail::isResolved(type(), rstate); }
72 void setDefault(
const hilti::Expression& e) { children()[2] = e; }
73 void setIsTypeParameter() { _is_type_param =
true; }
74 void setType(
const hilti::Type& t) { children()[1] = t; }
76 bool operator==(
const Parameter& other)
const {
77 return id() == other.
id() && type() == other.type() && kind() == other.kind() && default_() == other.default_();
81 bool isConstant()
const {
return _kind == parameter::Kind::In; }
83 const ID&
id()
const {
return child<ID>(0); }
85 Linkage
linkage()
const {
return Linkage::Private; }
95 parameter::Kind _kind = parameter::Kind::Unknown;
96 bool _is_type_param =
false;
101 if ( p1.kind() != p2.kind() || p1.default_() != p2.default_() )
107 if ( auto1 || auto2 )
110 return p1.type() == p2.type();
Definition: declaration.h:53
const Node none
Definition: node.cc:14
bool isConstant() const
Definition: parameter.h:81
Definition: attribute.h:174
Definition: declaration.h:87
Definition: parameter.h:46
auto isEqual(const Declaration &other) const
Definition: parameter.h:89
const ID & id() const
Definition: parameter.h:83
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:97
auto properties() const
Definition: parameter.h:92
Definition: declaration.h:18
Linkage linkage() const
Definition: parameter.h:85
std::string displayName() const
Definition: parameter.h:87