8 #include <hilti/ast/attribute.h> 9 #include <hilti/ast/declarations/type.h> 10 #include <hilti/ast/expressions/keyword.h> 11 #include <hilti/ast/function.h> 13 #include <spicy/ast/aliases.h> 14 #include <spicy/ast/engine.h> 22 namespace unit::item {
31 Hook(
const std::vector<type::function::Parameter>& params, std::optional<Statement> body, Engine engine,
32 std::optional<AttributeSet> attrs = {},
Meta m =
Meta())
35 type::function::Flavor::Hook, m),
36 std::move(body), hilti::function::CallingConvention::Standard, std::move(attrs), m),
43 const auto&
function()
const {
return child<Function>(0); }
45 auto body()
const {
return function().body(); }
46 const auto& ftype()
const {
return function().ftype(); }
47 const auto& id()
const {
return function().
id(); }
48 const auto& type()
const {
return function().type(); }
50 Engine engine()
const {
return _engine; }
54 std::optional<Expression> priority()
const;
56 bool isForEach()
const {
return AttributeSet::find(
function().attributes(),
"foreach").has_value(); }
57 bool isDebug()
const {
return AttributeSet::find(
function().attributes(),
"%debug").has_value(); }
59 void setID(
ID id) { childs()[0].as<
Function>().setID(std::move(
id)); }
60 void setUnitTypeRef(
NodeRef p) { _unit_type = std::move(p); }
61 void setFieldRef(
NodeRef p) { _unit_field = std::move(p); }
63 void setResultType(
Type t) { childs()[0].as<
Function>().setResultType(std::move(t)); }
65 bool operator==(
const Hook& other)
const {
return function() == other.function() && _engine == other._engine; }
67 auto properties()
const {
68 return node::Properties{{
"engine", to_string(_engine)},
69 {
"unit_type", _unit_type.renderedRid()},
70 {
"unit_field", _unit_field.renderedRid()}};
80 inline Node to_node(
Hook f) {
return Node(std::move(f)); }
Definition: function.h:71
const Node none
Definition: node.cc:14
Definition: function.h:44
static Declaration createDollarDollarDeclaration(Type t)
Definition: keyword.h:64
Definition: optional-ref.h:22
hilti::optional_ref< const Attribute > find(std::string_view tag) const
Definition: attribute.h:171
Definition: node-ref.h:44