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,
32  QualifiedType::create(ctx, type::Member::create(ctx, id, meta), Constness::Const, meta),
33  id,
34  meta);
35  }
36 
37 protected:
38  Member(ASTContext* ctx, Nodes children, hilti::ID id, Meta meta)
39  : Expression(ctx, NodeTags, std::move(children), std::move(meta)), _id(std::move(id)) {}
40 
41  HILTI_NODE_1(expression::Member, Expression, final);
42 
43 private:
44  hilti::ID _id;
45 };
46 
47 } // namespace hilti::expression
Definition: ast-context.h:128
T * make(Args &&... args)
Definition: ast-context.h:382
Definition: expression.h:15
Definition: id.h:15
Definition: meta.h:30
const auto & children() const
Definition: node.h:382
const auto & meta() const
Definition: node.h:324
virtual node::Properties properties() const
Definition: node.h:953
Definition: type.h:365
static auto create(ASTContext *ctx, UnqualifiedType *t, Constness const_, Meta m=Meta())
Definition: type.h:436
Definition: member.h:15
QualifiedType * type() const final
Definition: member.h:19
node::Properties properties() const final
Definition: member.h:21