9 #include <hilti/ast/attribute.h> 10 #include <hilti/ast/declaration.h> 11 #include <hilti/ast/expression.h> 12 #include <hilti/ast/function.h> 13 #include <hilti/ast/id.h> 14 #include <hilti/ast/types/auto.h> 15 #include <hilti/ast/types/unknown.h> 18 namespace declaration {
25 :
DeclarationBase(nodes(std::move(
id), std::move(t), std::move(attrs), node::none), std::move(m)) {}
26 Field(
ID id, ::hilti::function::CallingConvention cc,
type::Function ft, std::optional<AttributeSet> attrs = {},
28 :
DeclarationBase(nodes(std::move(
id), std::move(ft), std::move(attrs), node::none), std::move(m)), _cc(cc) {}
30 :
DeclarationBase(nodes(std::move(
id), node::none, std::move(attrs), std::move(inline_func)), std::move(m)),
31 _cc(inline_func.callingConvention()) {}
33 const auto& id()
const {
return child<ID>(0); }
35 auto callingConvention()
const {
return _cc; }
38 bool isResolved(type::ResolvedState* rstate)
const {
39 if (
children()[1].isA<type::Function>() )
42 if (
auto func = inlineFunction() )
43 return type::detail::isResolved(func->type(), rstate);
45 return type::detail::isResolved(child<hilti::Type>(1), rstate);
49 if (
const auto& func = inlineFunction() )
52 return child<hilti::Type>(1);
56 if ( inlineFunction() )
64 if (
auto x = a->valueAsExpression() )
73 auto isInternal()
const {
return AttributeSet::find(attributes(),
"&internal").has_value(); }
74 auto isOptional()
const {
return AttributeSet::find(attributes(),
"&optional").has_value(); }
75 auto isStatic()
const {
return AttributeSet::find(attributes(),
"&static").has_value(); }
76 auto isNoEmit()
const {
return AttributeSet::find(attributes(),
"&no-emit").has_value(); }
80 if (
auto func = inlineFunction() )
88 bool operator==(
const Field& other)
const {
89 return id() == other.id() && type() == other.type() && attributes() == other.attributes() && _cc == other._cc;
93 declaration::Linkage
linkage()
const {
return declaration::Linkage::Struct; }
108 ::hilti::function::CallingConvention _cc = ::hilti::function::CallingConvention::Standard;
Definition: function.h:71
declaration::Linkage linkage() const
Definition: field.h:93
Definition: declaration.h:53
auto isEqual(const Declaration &other) const
Definition: field.h:102
auto & _typeNode()
Definition: field.h:79
const Node none
Definition: node.cc:14
const auto & children() const
Definition: node.h:470
Definition: function.h:44
bool isConstant() const
Definition: field.h:96
std::string displayName() const
Definition: field.h:99
Definition: attribute.h:145
Definition: declaration.h:87
Definition: optional-ref.h:22
Node & _typeNode()
Definition: function.h:72
hilti::optional_ref< const Attribute > find(std::string_view tag) const
Definition: attribute.h:171
auto properties() const
Definition: field.h:105
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:99
Definition: node-ref.h:44