7 #include <hilti/ast/declaration.h>
8 #include <hilti/ast/declarations/expression.h>
9 #include <hilti/ast/expression.h>
10 #include <hilti/ast/type.h>
11 #include <hilti/ast/types/auto.h>
13 namespace hilti::expression {
25 constexpr util::enum_::Value<Kind> Kinds[] = {{.value = Kind::Self, .name =
"self"},
26 {.value = Kind::DollarDollar, .name =
"$$"},
27 {.value = Kind::Captures, .name =
"$@"},
28 {.value = Kind::Scope, .name =
"$scope"}};
32 constexpr
auto from_string(std::string_view s) {
return util::enum_::from_string<Kind>(s, detail::Kinds); }
35 constexpr
auto to_string(Kind m) {
return util::enum_::to_string(m, detail::Kinds); }
42 keyword::Kind kind()
const {
return _kind; }
48 auto p = node::Properties{{{
"kind", to_string(_kind)}}};
53 return ctx->
make<Keyword>(ctx, {
type}, kind, std::move(
meta));
56 static auto create(ASTContext* ctx, keyword::Kind kind,
const Meta&
meta = {}) {
62 auto* kw = create(ctx, keyword::Kind::DollarDollar,
type);
63 return declaration::Expression::create(ctx,
ID(
"__dd"), kw, hilti::declaration::Linkage::Private);
76 inline std::ostream& operator<<(std::ostream& stream,
const Keyword& keyword) {
77 switch ( keyword.kind() ) {
78 case keyword::Kind::Self:
return stream <<
"<self>";
79 case keyword::Kind::DollarDollar:
return stream <<
"<$$>";
80 case keyword::Kind::Captures:
return stream <<
"<captures>";
81 case keyword::Kind::Scope:
return stream <<
"<scope>";
Definition: ast-context.h:121
T * make(Args &&... args)
Definition: ast-context.h:366
Definition: expression.h:15
void setChild(ASTContext *ctx, size_t idx, Node *n)
Definition: node.h:602
const auto & children() const
Definition: node.h:364
const auto & meta() const
Definition: node.h:306
virtual node::Properties properties() const
Definition: node.h:891
Definition: forward.h:758
static QualifiedType * createAuto(ASTContext *ctx, const Meta &m=Meta())
Definition: type.cc:121
QualifiedType * type() const final
Definition: keyword.h:45
static auto createDollarDollarDeclaration(ASTContext *ctx, QualifiedType *type)
Definition: keyword.h:61
node::Properties properties() const final
Definition: keyword.h:47