9 #include <hilti/ast/types/unknown.h> 11 #include <spicy/ast/aliases.h> 12 #include <spicy/ast/engine.h> 13 #include <spicy/ast/types/unit-item.h> 23 UnresolvedField(
const std::optional<ID>&
id, Type type, Engine e,
const std::vector<Expression>& args,
24 std::optional<Expression> repeat,
const std::vector<Expression>& sinks,
25 std::optional<AttributeSet> attrs = {}, std::optional<Expression> cond = {},
26 std::vector<Hook> hooks = {},
Meta m =
Meta())
28 :
NodeBase(nodes(node::none, std::move(type),
id, std::move(repeat), std::move(attrs), std::move(cond), args,
29 sinks, std::move(hooks)),
33 _args_end(_args_start + static_cast<int>(args.size())),
34 _sinks_start(_args_end),
35 _sinks_end(_sinks_start + static_cast<int>(sinks.size())) {}
37 UnresolvedField(
const std::optional<ID>&
id, Ctor ctor, Engine e,
const std::vector<Expression>& args,
38 std::optional<Expression> repeat,
const std::vector<Expression>& sinks,
39 std::optional<AttributeSet> attrs = {}, std::optional<Expression> cond = {},
40 std::vector<Hook> hooks = {},
Meta m =
Meta())
41 :
NodeBase(nodes(node::none, std::move(ctor),
id, std::move(repeat), std::move(attrs), std::move(cond), args,
42 sinks, std::move(hooks)),
46 _args_end(_args_start + static_cast<int>(args.size())),
47 _sinks_start(_args_end),
48 _sinks_end(_sinks_start + static_cast<int>(sinks.size())) {}
50 UnresolvedField(
const std::optional<ID>&
id, Item item, Engine e,
const std::vector<Expression>& args,
51 std::optional<Expression> repeat,
const std::vector<Expression>& sinks,
52 std::optional<AttributeSet> attrs = {}, std::optional<Expression> cond = {},
53 std::vector<Hook> hooks = {},
Meta m =
Meta())
54 :
NodeBase(nodes(node::none, std::move(item),
id, std::move(repeat), std::move(attrs), std::move(cond), args,
55 sinks, std::move(hooks)),
59 _args_end(_args_start + static_cast<int>(args.size())),
60 _sinks_start(_args_end),
61 _sinks_end(_sinks_start + static_cast<int>(sinks.size())) {}
63 UnresolvedField(std::optional<ID>
id,
ID unresolved_id, Engine e,
const std::vector<Expression>& args,
64 std::optional<Expression> repeat,
const std::vector<Expression>& sinks,
65 std::optional<AttributeSet> attrs = {}, std::optional<Expression> cond = {},
66 std::vector<Hook> hooks = {},
Meta m =
Meta())
67 :
NodeBase(nodes(std::move(unresolved_id), node::none, std::move(
id), std::move(repeat), std::move(attrs),
68 std::move(cond), args, sinks, std::move(hooks)),
72 _args_end(_args_start + static_cast<int>(args.size())),
73 _sinks_start(_args_end),
74 _sinks_end(_sinks_start + static_cast<int>(sinks.size())) {}
76 auto fieldID()
const {
return childs()[2].tryReferenceAs<
ID>(); }
78 const auto& index()
const {
return _index; }
80 auto unresolvedID()
const {
return childs()[0].tryReferenceAs<
ID>(); }
83 auto type()
const {
return childs()[1].tryReferenceAs<Type>(); }
84 auto ctor()
const {
return childs()[1].tryReferenceAs<Ctor>(); }
85 auto item()
const {
return childs()[1].tryReferenceAs<Item>(); }
87 auto repeatCount()
const {
return childs()[3].tryReferenceAs<Expression>(); }
89 auto condition()
const {
return childs()[5].tryReferenceAs<Expression>(); }
90 auto arguments()
const {
return childs<Expression>(_args_start, _args_end); }
91 auto sinks()
const {
return childs<Expression>(_sinks_start, _sinks_end); }
92 auto hooks()
const {
return childs<Hook>(_sinks_end, -1); }
93 Engine engine()
const {
return _engine; }
96 return _engine == other._engine && unresolvedID() == other.unresolvedID() && fieldID() == other.fieldID() &&
97 attributes() == other.attributes() && arguments() == other.arguments() && sinks() == other.sinks() &&
98 condition() == other.condition() && hooks() == other.hooks();
102 Type itemType()
const {
return hilti::type::unknown; }
103 auto isEqual(
const Item& other)
const {
return node::isEqual(
this, other); }
106 auto properties()
const {
return node::Properties{{
"engine", to_string(_engine)}}; }
123 std::optional<uint64_t> _index;
124 const int _args_start;
126 const int _sinks_start;
127 const int _sinks_end;
static UnresolvedField setIndex(const UnresolvedField &f, uint64_t index)
Definition: unresolved-field.h:115
NodeBase(Meta meta)
Definition: node.h:325
auto & childs() const
Definition: node.h:445
Definition: unresolved-field.h:21
Definition: attribute.h:159
Definition: unit-item.h:19
Definition: unit-item.h:39