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> 24 :
DeclarationBase(nodes(std::move(
id), std::move(t), std::move(attrs), node::none), std::move(m)) {}
25 Field(
ID id, ::hilti::function::CallingConvention cc,
type::Function ft, std::optional<AttributeSet> attrs = {},
27 :
DeclarationBase(nodes(std::move(
id), std::move(ft), std::move(attrs), node::none), std::move(m)), _cc(cc) {}
29 :
DeclarationBase(nodes(std::move(
id), node::none, std::move(attrs), inline_func), std::move(m)),
30 _cc(inline_func.callingConvention()) {}
32 const auto& id()
const {
return child<ID>(0); }
34 auto callingConvention()
const {
return _cc; }
37 bool isResolved(type::ResolvedState* rstate)
const {
38 if (
children()[1].isA<type::Function>() )
41 if (
auto func = inlineFunction() )
42 return type::detail::isResolved(func->type(), rstate);
44 return type::detail::isResolved(child<hilti::Type>(1), rstate);
48 if (
const auto& func = inlineFunction() )
51 return child<hilti::Type>(1);
55 if ( inlineFunction() )
63 if (
auto x = a->valueAsExpression() )
72 auto isInternal()
const {
return AttributeSet::find(attributes(),
"&internal").has_value(); }
73 auto isOptional()
const {
return AttributeSet::find(attributes(),
"&optional").has_value(); }
74 auto isStatic()
const {
return AttributeSet::find(attributes(),
"&static").has_value(); }
75 auto isNoEmit()
const {
return AttributeSet::find(attributes(),
"&no-emit").has_value(); }
79 if (
auto func = inlineFunction() )
87 bool operator==(
const Field& other)
const {
88 return id() == other.id() && type() == other.type() && attributes() == other.attributes() && _cc == other._cc;
92 declaration::Linkage
linkage()
const {
return declaration::Linkage::Struct; }
107 ::hilti::function::CallingConvention _cc = ::hilti::function::CallingConvention::Standard;
Definition: function.h:71
declaration::Linkage linkage() const
Definition: field.h:92
Definition: declaration.h:53
auto isEqual(const Declaration &other) const
Definition: field.h:101
auto & _typeNode()
Definition: field.h:78
const Node none
Definition: node.cc:14
const auto & children() const
Definition: node.h:471
Definition: function.h:44
bool isConstant() const
Definition: field.h:95
std::string displayName() const
Definition: field.h:98
Definition: attribute.h:145
Definition: declaration.h:87
Definition: optional-ref.h:22
Node & _typeNode()
Definition: function.h:73
hilti::optional_ref< const Attribute > find(std::string_view tag) const
Definition: attribute.h:171
auto properties() const
Definition: field.h:104
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:97
Definition: node-ref.h:45
Definition: declaration.h:18