Spicy
member.h
1 // Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <utility>
6 
7 #include <hilti/ast/expression.h>
8 #include <hilti/ast/id.h>
9 #include <hilti/ast/type.h>
10 #include <hilti/ast/types/member.h>
11 
12 namespace hilti::expression {
13 
15 class Member : public Expression {
16 public:
17  const auto& id() const { return _id; }
18 
19  QualifiedType* type() const final { return child<QualifiedType>(0); }
20 
21  node::Properties properties() const final {
22  auto p = node::Properties{{"id", _id}};
23  return Expression::properties() + std::move(p);
24  }
25 
26  static auto create(ASTContext* ctx, QualifiedType* member_type, const hilti::ID& id, Meta meta = {}) {
27  return ctx->make<Member>(ctx, {member_type}, id, std::move(meta));
28  }
29 
30  static auto create(ASTContext* ctx, const hilti::ID& id, const Meta& meta = {}) {
31  return create(ctx, QualifiedType::create(ctx, type::Member::create(ctx, id, meta), Constness::Const, meta), id,
32  meta);
33  }
34 
35 protected:
36  Member(ASTContext* ctx, Nodes children, hilti::ID id, Meta meta)
37  : Expression(ctx, NodeTags, std::move(children), std::move(meta)), _id(std::move(id)) {}
38 
39  HILTI_NODE_1(expression::Member, Expression, final);
40 
41 private:
42  hilti::ID _id;
43 };
44 
45 } // namespace hilti::expression
Definition: ast-context.h:121
T * make(Args &&... args)
Definition: ast-context.h:366
Definition: expression.h:15
Definition: id.h:15
Definition: meta.h:30
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: type.h:362
static auto create(ASTContext *ctx, UnqualifiedType *t, Constness const_, Meta m=Meta())
Definition: type.h:427
Definition: member.h:15
QualifiedType * type() const final
Definition: member.h:19
node::Properties properties() const final
Definition: member.h:21