9 #include <hilti/ast/attribute.h>
10 #include <hilti/ast/forward.h>
11 #include <hilti/ast/node.h>
12 #include <hilti/ast/statement.h>
13 #include <hilti/ast/type.h>
14 #include <hilti/ast/types/function.h>
21 enum class CallingConvention {
28 constexpr util::enum_::Value<CallingConvention> Conventions[] = {
29 {CallingConvention::Extern,
"extern"},
30 {CallingConvention::ExternNoSuspend,
"extern-no-suspend"},
31 {CallingConvention::Standard,
"<standard>"},
35 constexpr
auto to_string(CallingConvention cc) {
return util::enum_::to_string(cc, detail::Conventions); }
37 namespace calling_convention {
38 constexpr
auto from_string(std::string_view s) {
39 return util::enum_::from_string<CallingConvention>(s, detail::Conventions);
47 const auto& id()
const {
return _id; }
48 auto type()
const {
return child<QualifiedType>(0); }
49 auto ftype()
const {
return child<QualifiedType>(0)->type()->as<
type::Function>(); }
50 auto body()
const {
return child<Statement>(1); }
51 auto attributes()
const {
return child<AttributeSet>(2); }
52 auto callingConvention()
const {
return _cc; }
53 auto isStatic()
const {
return attributes()->find(hilti::attribute::kind::Static) !=
nullptr; }
56 void setID(
ID id) { _id = std::move(
id); }
60 auto p = node::Properties{{
"id", _id}, {
"cc", to_string(_cc)}};
65 function::CallingConvention cc = function::CallingConvention::Standard,
68 attrs = AttributeSet::create(ctx);
75 Function(ASTContext* ctx, Nodes
children, ID
id, function::CallingConvention cc, Meta
meta = {})
76 :
Node(ctx, NodeTags, std::move(
children), std::move(
meta)), _id(std::move(
id)), _cc(cc) {}
78 std::string
_dump()
const override;
80 HILTI_NODE_0(Function,
final);
84 function::CallingConvention _cc;
Definition: ast-context.h:121
T * make(Args &&... args)
Definition: ast-context.h:366
Definition: attribute.h:198
Definition: function.h:45
node::Properties properties() const override
Definition: function.h:59
std::string _dump() const override
Definition: function.cc:8
void setChild(ASTContext *ctx, size_t idx, Node *n)
Definition: node.h:577
const auto & children() const
Definition: node.h:363
const auto & meta() const
Definition: node.h:305
Node(ASTContext *ctx, node::Tags node_tags, Nodes children, Meta meta)
Definition: node.h:897
virtual node::Properties properties() const
Definition: node.h:866
static auto create(ASTContext *ctx, UnqualifiedType *t, Constness const_, Meta m=Meta())
Definition: type.h:421
Definition: statement.h:15
Definition: function.h:49