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> 37 Struct(std::vector<type::function::Parameter> params, std::vector<Declaration> fields,
Meta m =
Meta())
39 util::transform(params,
41 p.setIsTypeParameter();
49 if (
childs()[0].isA<Declaration>() )
55 auto hasFinalizer()
const {
return field(
"~finally").has_value(); }
56 auto parameters()
const {
return childsOfType<type::function::Parameter>(); }
57 auto parameterRefs()
const {
return childRefsOfType<type::function::Parameter>(); }
59 auto fields()
const {
return childsOfType<declaration::Field>(); }
62 for (
const auto& f : fields() ) {
72 for (
const auto& f : fields() ) {
85 bool operator==(
const Struct& other)
const {
return fields() == other.fields(); }
88 auto isEqual(
const Type& other)
const {
return node::isEqual(
this, other); }
91 for (
const auto& c :
childs() ) {
93 if ( ! f->isResolved(rstate) )
97 if ( ! p->isResolved(rstate) )
106 std::vector<Node> params;
107 for (
const auto& f : fields() )
108 params.emplace_back(f.type());
128 n->childs()[0] = std::move(d);
132 bool _wildcard =
false;
Definition: declaration.h:53
const Node none
Definition: node.cc:14
void addChild(Node n)
Definition: node.h:459
auto isWildcard() const
Definition: struct.h:112
auto properties() const
Definition: struct.h:115
auto isEqual(const Type &other) const
Definition: struct.h:88
Definition: reference.h:83
auto typeParameters() const
Definition: struct.h:105
auto _isResolved(ResolvedState *rstate) const
Definition: struct.h:90
Definition: expression.h:17
Definition: optional-ref.h:22
Definition: parameter.h:47
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:99
Definition: node-ref.h:44
const auto & childs() const
Definition: node.h:470
static void setSelf(Node *n)
Definition: struct.h:123