12 #include <hilti/ast/attribute.h> 13 #include <hilti/ast/declaration.h> 14 #include <hilti/ast/declarations/expression.h> 15 #include <hilti/ast/declarations/field.h> 16 #include <hilti/ast/expression.h> 17 #include <hilti/ast/expressions/grouping.h> 18 #include <hilti/ast/expressions/keyword.h> 19 #include <hilti/ast/expressions/unresolved-operator.h> 20 #include <hilti/ast/function.h> 21 #include <hilti/ast/id.h> 22 #include <hilti/ast/operators/reference.h> 23 #include <hilti/ast/scope.h> 24 #include <hilti/ast/type.h> 25 #include <hilti/ast/types/function.h> 26 #include <hilti/ast/types/reference.h> 27 #include <hilti/ast/types/unknown.h> 39 :
TypeBase(nodes(
node::none, std::move(fields)), std::move(m)), _anon_struct(++_anon_struct_counter) {}
41 Struct(
const std::vector<type::function::Parameter>& params, std::vector<Declaration> fields,
Meta m =
Meta())
43 util::transform(params,
45 p.setIsTypeParameter();
53 if (
children()[0].isA<Declaration>() )
59 auto hasFinalizer()
const {
return field(
"~finally").has_value(); }
60 auto parameters()
const {
return childrenOfType<type::function::Parameter>(); }
61 auto parameterRefs()
const {
return childRefsOfType<type::function::Parameter>(); }
63 auto fields()
const {
return childrenOfType<declaration::Field>(); }
66 for (
const auto& f : fields() ) {
76 for (
const auto& f : fields() ) {
89 bool operator==(
const Struct& other)
const {
return fields() == other.fields(); }
95 if ( _anon_struct >= 0 || x->_anon_struct >= 0 )
96 return _anon_struct == x->_anon_struct;
99 return node::isEqual(
this, other);
106 return std::all_of(cs.begin(), cs.end(), [&](
const auto& c) {
107 if (
auto f = c.template tryAs<declaration::Field>() )
108 return f->isResolved(rstate);
110 else if (
auto p = c.template tryAs<type::function::Parameter>() )
111 return p->isResolved(rstate);
119 std::vector<Node> params;
120 for (
const auto& f : fields() )
121 params.emplace_back(f.type());
141 n->children()[0] = d;
145 bool _wildcard =
false;
146 int64_t _anon_struct = -1;
148 static int64_t _anon_struct_counter;
Definition: declaration.h:54
const Node none
Definition: node.cc:14
const auto & children() const
Definition: node.h:472
void addChild(Node n)
Definition: node.h:461
auto isWildcard() const
Definition: struct.h:125
auto properties() const
Definition: struct.h:128
auto isEqual(const Type &other) const
Definition: struct.h:92
Definition: reference.h:82
auto typeParameters() const
Definition: struct.h:118
auto _isResolved(ResolvedState *rstate) const
Definition: struct.h:103
Definition: expression.h:16
Definition: optional-ref.h:22
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:98
Definition: node-ref.h:45
static void setSelf(Node *n)
Definition: struct.h:136