diff options
Diffstat (limited to 'source/Plugins/ExpressionParser/Go/GoAST.h')
-rw-r--r-- | source/Plugins/ExpressionParser/Go/GoAST.h | 1977 |
1 files changed, 0 insertions, 1977 deletions
diff --git a/source/Plugins/ExpressionParser/Go/GoAST.h b/source/Plugins/ExpressionParser/Go/GoAST.h deleted file mode 100644 index d24e6c548718..000000000000 --- a/source/Plugins/ExpressionParser/Go/GoAST.h +++ /dev/null @@ -1,1977 +0,0 @@ -//===-- GoAST.h -------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// DO NOT EDIT. -// Generated by gen_go_ast.py - -#ifndef liblldb_GoAST_h -#define liblldb_GoAST_h - -#include "Plugins/ExpressionParser/Go/GoLexer.h" -#include "lldb/lldb-forward.h" -#include "lldb/lldb-private.h" -#include "llvm/Support/Casting.h" - -namespace lldb_private { - -class GoASTNode { -public: - typedef GoLexer::TokenType TokenType; - typedef GoLexer::Token Token; - enum ChanDir { - eChanBidir, - eChanSend, - eChanRecv, - }; - enum NodeKind { - eBadDecl, - eFuncDecl, - eGenDecl, - eArrayType, - eBadExpr, - eBasicLit, - eBinaryExpr, - eIdent, - eCallExpr, - eChanType, - eCompositeLit, - eEllipsis, - eFuncType, - eFuncLit, - eIndexExpr, - eInterfaceType, - eKeyValueExpr, - eMapType, - eParenExpr, - eSelectorExpr, - eSliceExpr, - eStarExpr, - eStructType, - eTypeAssertExpr, - eUnaryExpr, - eImportSpec, - eTypeSpec, - eValueSpec, - eAssignStmt, - eBadStmt, - eBlockStmt, - eBranchStmt, - eCaseClause, - eCommClause, - eDeclStmt, - eDeferStmt, - eEmptyStmt, - eExprStmt, - eForStmt, - eGoStmt, - eIfStmt, - eIncDecStmt, - eLabeledStmt, - eRangeStmt, - eReturnStmt, - eSelectStmt, - eSendStmt, - eSwitchStmt, - eTypeSwitchStmt, - eField, - eFieldList, - }; - - virtual ~GoASTNode() = default; - - NodeKind GetKind() const { return m_kind; } - - virtual const char *GetKindName() const = 0; - - template <typename V> void WalkChildren(V &v); - -protected: - explicit GoASTNode(NodeKind kind) : m_kind(kind) {} - -private: - const NodeKind m_kind; - - GoASTNode(const GoASTNode &) = delete; - const GoASTNode &operator=(const GoASTNode &) = delete; -}; - -class GoASTDecl : public GoASTNode { -public: - template <typename R, typename V> R Visit(V *v) const; - - static bool classof(const GoASTNode *n) { - return n->GetKind() >= eBadDecl && n->GetKind() <= eGenDecl; - } - -protected: - explicit GoASTDecl(NodeKind kind) : GoASTNode(kind) {} - -private: - GoASTDecl(const GoASTDecl &) = delete; - const GoASTDecl &operator=(const GoASTDecl &) = delete; -}; - -class GoASTExpr : public GoASTNode { -public: - template <typename R, typename V> R Visit(V *v) const; - - static bool classof(const GoASTNode *n) { - return n->GetKind() >= eArrayType && n->GetKind() <= eUnaryExpr; - } - -protected: - explicit GoASTExpr(NodeKind kind) : GoASTNode(kind) {} - -private: - GoASTExpr(const GoASTExpr &) = delete; - const GoASTExpr &operator=(const GoASTExpr &) = delete; -}; - -class GoASTSpec : public GoASTNode { -public: - template <typename R, typename V> R Visit(V *v) const; - - static bool classof(const GoASTNode *n) { - return n->GetKind() >= eImportSpec && n->GetKind() <= eValueSpec; - } - -protected: - explicit GoASTSpec(NodeKind kind) : GoASTNode(kind) {} - -private: - GoASTSpec(const GoASTSpec &) = delete; - const GoASTSpec &operator=(const GoASTSpec &) = delete; -}; - -class GoASTStmt : public GoASTNode { -public: - template <typename R, typename V> R Visit(V *v) const; - - static bool classof(const GoASTNode *n) { - return n->GetKind() >= eAssignStmt && n->GetKind() <= eTypeSwitchStmt; - } - -protected: - explicit GoASTStmt(NodeKind kind) : GoASTNode(kind) {} - -private: - GoASTStmt(const GoASTStmt &) = delete; - const GoASTStmt &operator=(const GoASTStmt &) = delete; -}; - -class GoASTArrayType : public GoASTExpr { -public: - GoASTArrayType(GoASTExpr *len, GoASTExpr *elt) - : GoASTExpr(eArrayType), m_len_up(len), m_elt_up(elt) {} - ~GoASTArrayType() override = default; - - const char *GetKindName() const override { return "ArrayType"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eArrayType; } - - const GoASTExpr *GetLen() const { return m_len_up.get(); } - void SetLen(GoASTExpr *len) { m_len_up.reset(len); } - - const GoASTExpr *GetElt() const { return m_elt_up.get(); } - void SetElt(GoASTExpr *elt) { m_elt_up.reset(elt); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_len_up; - std::unique_ptr<GoASTExpr> m_elt_up; - - GoASTArrayType(const GoASTArrayType &) = delete; - const GoASTArrayType &operator=(const GoASTArrayType &) = delete; -}; - -class GoASTAssignStmt : public GoASTStmt { -public: - explicit GoASTAssignStmt(bool define) - : GoASTStmt(eAssignStmt), m_define(define) {} - ~GoASTAssignStmt() override = default; - - const char *GetKindName() const override { return "AssignStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eAssignStmt; - } - - size_t NumLhs() const { return m_lhs.size(); } - const GoASTExpr *GetLhs(int i) const { return m_lhs[i].get(); } - void AddLhs(GoASTExpr *lhs) { - m_lhs.push_back(std::unique_ptr<GoASTExpr>(lhs)); - } - - size_t NumRhs() const { return m_rhs.size(); } - const GoASTExpr *GetRhs(int i) const { return m_rhs[i].get(); } - void AddRhs(GoASTExpr *rhs) { - m_rhs.push_back(std::unique_ptr<GoASTExpr>(rhs)); - } - - bool GetDefine() const { return m_define; } - void SetDefine(bool define) { m_define = define; } - -private: - friend class GoASTNode; - std::vector<std::unique_ptr<GoASTExpr>> m_lhs; - std::vector<std::unique_ptr<GoASTExpr>> m_rhs; - bool m_define; - - GoASTAssignStmt(const GoASTAssignStmt &) = delete; - const GoASTAssignStmt &operator=(const GoASTAssignStmt &) = delete; -}; - -class GoASTBadDecl : public GoASTDecl { -public: - GoASTBadDecl() : GoASTDecl(eBadDecl) {} - ~GoASTBadDecl() override = default; - - const char *GetKindName() const override { return "BadDecl"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eBadDecl; } - - GoASTBadDecl(const GoASTBadDecl &) = delete; - const GoASTBadDecl &operator=(const GoASTBadDecl &) = delete; -}; - -class GoASTBadExpr : public GoASTExpr { -public: - GoASTBadExpr() : GoASTExpr(eBadExpr) {} - ~GoASTBadExpr() override = default; - - const char *GetKindName() const override { return "BadExpr"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eBadExpr; } - - GoASTBadExpr(const GoASTBadExpr &) = delete; - const GoASTBadExpr &operator=(const GoASTBadExpr &) = delete; -}; - -class GoASTBadStmt : public GoASTStmt { -public: - GoASTBadStmt() : GoASTStmt(eBadStmt) {} - ~GoASTBadStmt() override = default; - - const char *GetKindName() const override { return "BadStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eBadStmt; } - - GoASTBadStmt(const GoASTBadStmt &) = delete; - const GoASTBadStmt &operator=(const GoASTBadStmt &) = delete; -}; - -class GoASTBasicLit : public GoASTExpr { -public: - explicit GoASTBasicLit(Token value) : GoASTExpr(eBasicLit), m_value(value) {} - ~GoASTBasicLit() override = default; - - const char *GetKindName() const override { return "BasicLit"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eBasicLit; } - - Token GetValue() const { return m_value; } - void SetValue(Token value) { m_value = value; } - -private: - friend class GoASTNode; - Token m_value; - - GoASTBasicLit(const GoASTBasicLit &) = delete; - const GoASTBasicLit &operator=(const GoASTBasicLit &) = delete; -}; - -class GoASTBinaryExpr : public GoASTExpr { -public: - GoASTBinaryExpr(GoASTExpr *x, GoASTExpr *y, TokenType op) - : GoASTExpr(eBinaryExpr), m_x_up(x), m_y_up(y), m_op(op) {} - ~GoASTBinaryExpr() override = default; - - const char *GetKindName() const override { return "BinaryExpr"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eBinaryExpr; - } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - - const GoASTExpr *GetY() const { return m_y_up.get(); } - void SetY(GoASTExpr *y) { m_y_up.reset(y); } - - TokenType GetOp() const { return m_op; } - void SetOp(TokenType op) { m_op = op; } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - std::unique_ptr<GoASTExpr> m_y_up; - TokenType m_op; - - GoASTBinaryExpr(const GoASTBinaryExpr &) = delete; - const GoASTBinaryExpr &operator=(const GoASTBinaryExpr &) = delete; -}; - -class GoASTBlockStmt : public GoASTStmt { -public: - GoASTBlockStmt() : GoASTStmt(eBlockStmt) {} - ~GoASTBlockStmt() override = default; - - const char *GetKindName() const override { return "BlockStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eBlockStmt; } - - size_t NumList() const { return m_list.size(); } - const GoASTStmt *GetList(int i) const { return m_list[i].get(); } - void AddList(GoASTStmt *list) { - m_list.push_back(std::unique_ptr<GoASTStmt>(list)); - } - -private: - friend class GoASTNode; - std::vector<std::unique_ptr<GoASTStmt>> m_list; - - GoASTBlockStmt(const GoASTBlockStmt &) = delete; - const GoASTBlockStmt &operator=(const GoASTBlockStmt &) = delete; -}; - -class GoASTIdent : public GoASTExpr { -public: - explicit GoASTIdent(Token name) : GoASTExpr(eIdent), m_name(name) {} - ~GoASTIdent() override = default; - - const char *GetKindName() const override { return "Ident"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eIdent; } - - Token GetName() const { return m_name; } - void SetName(Token name) { m_name = name; } - -private: - friend class GoASTNode; - Token m_name; - - GoASTIdent(const GoASTIdent &) = delete; - const GoASTIdent &operator=(const GoASTIdent &) = delete; -}; - -class GoASTBranchStmt : public GoASTStmt { -public: - GoASTBranchStmt(GoASTIdent *label, TokenType tok) - : GoASTStmt(eBranchStmt), m_label_up(label), m_tok(tok) {} - ~GoASTBranchStmt() override = default; - - const char *GetKindName() const override { return "BranchStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eBranchStmt; - } - - const GoASTIdent *GetLabel() const { return m_label_up.get(); } - void SetLabel(GoASTIdent *label) { m_label_up.reset(label); } - - TokenType GetTok() const { return m_tok; } - void SetTok(TokenType tok) { m_tok = tok; } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTIdent> m_label_up; - TokenType m_tok; - - GoASTBranchStmt(const GoASTBranchStmt &) = delete; - const GoASTBranchStmt &operator=(const GoASTBranchStmt &) = delete; -}; - -class GoASTCallExpr : public GoASTExpr { -public: - explicit GoASTCallExpr(bool ellipsis) - : GoASTExpr(eCallExpr), m_ellipsis(ellipsis) {} - ~GoASTCallExpr() override = default; - - const char *GetKindName() const override { return "CallExpr"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eCallExpr; } - - const GoASTExpr *GetFun() const { return m_fun_up.get(); } - void SetFun(GoASTExpr *fun) { m_fun_up.reset(fun); } - - size_t NumArgs() const { return m_args.size(); } - const GoASTExpr *GetArgs(int i) const { return m_args[i].get(); } - void AddArgs(GoASTExpr *args) { - m_args.push_back(std::unique_ptr<GoASTExpr>(args)); - } - - bool GetEllipsis() const { return m_ellipsis; } - void SetEllipsis(bool ellipsis) { m_ellipsis = ellipsis; } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_fun_up; - std::vector<std::unique_ptr<GoASTExpr>> m_args; - bool m_ellipsis; - - GoASTCallExpr(const GoASTCallExpr &) = delete; - const GoASTCallExpr &operator=(const GoASTCallExpr &) = delete; -}; - -class GoASTCaseClause : public GoASTStmt { -public: - GoASTCaseClause() : GoASTStmt(eCaseClause) {} - ~GoASTCaseClause() override = default; - - const char *GetKindName() const override { return "CaseClause"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eCaseClause; - } - - size_t NumList() const { return m_list.size(); } - const GoASTExpr *GetList(int i) const { return m_list[i].get(); } - void AddList(GoASTExpr *list) { - m_list.push_back(std::unique_ptr<GoASTExpr>(list)); - } - - size_t NumBody() const { return m_body.size(); } - const GoASTStmt *GetBody(int i) const { return m_body[i].get(); } - void AddBody(GoASTStmt *body) { - m_body.push_back(std::unique_ptr<GoASTStmt>(body)); - } - -private: - friend class GoASTNode; - std::vector<std::unique_ptr<GoASTExpr>> m_list; - std::vector<std::unique_ptr<GoASTStmt>> m_body; - - GoASTCaseClause(const GoASTCaseClause &) = delete; - const GoASTCaseClause &operator=(const GoASTCaseClause &) = delete; -}; - -class GoASTChanType : public GoASTExpr { -public: - GoASTChanType(ChanDir dir, GoASTExpr *value) - : GoASTExpr(eChanType), m_dir(dir), m_value_up(value) {} - ~GoASTChanType() override = default; - - const char *GetKindName() const override { return "ChanType"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eChanType; } - - ChanDir GetDir() const { return m_dir; } - void SetDir(ChanDir dir) { m_dir = dir; } - - const GoASTExpr *GetValue() const { return m_value_up.get(); } - void SetValue(GoASTExpr *value) { m_value_up.reset(value); } - -private: - friend class GoASTNode; - ChanDir m_dir; - std::unique_ptr<GoASTExpr> m_value_up; - - GoASTChanType(const GoASTChanType &) = delete; - const GoASTChanType &operator=(const GoASTChanType &) = delete; -}; - -class GoASTCommClause : public GoASTStmt { -public: - GoASTCommClause() : GoASTStmt(eCommClause) {} - ~GoASTCommClause() override = default; - - const char *GetKindName() const override { return "CommClause"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eCommClause; - } - - const GoASTStmt *GetComm() const { return m_comm_up.get(); } - void SetComm(GoASTStmt *comm) { m_comm_up.reset(comm); } - - size_t NumBody() const { return m_body.size(); } - const GoASTStmt *GetBody(int i) const { return m_body[i].get(); } - void AddBody(GoASTStmt *body) { - m_body.push_back(std::unique_ptr<GoASTStmt>(body)); - } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTStmt> m_comm_up; - std::vector<std::unique_ptr<GoASTStmt>> m_body; - - GoASTCommClause(const GoASTCommClause &) = delete; - const GoASTCommClause &operator=(const GoASTCommClause &) = delete; -}; - -class GoASTCompositeLit : public GoASTExpr { -public: - GoASTCompositeLit() : GoASTExpr(eCompositeLit) {} - ~GoASTCompositeLit() override = default; - - const char *GetKindName() const override { return "CompositeLit"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eCompositeLit; - } - - const GoASTExpr *GetType() const { return m_type_up.get(); } - void SetType(GoASTExpr *type) { m_type_up.reset(type); } - - size_t NumElts() const { return m_elts.size(); } - const GoASTExpr *GetElts(int i) const { return m_elts[i].get(); } - void AddElts(GoASTExpr *elts) { - m_elts.push_back(std::unique_ptr<GoASTExpr>(elts)); - } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_type_up; - std::vector<std::unique_ptr<GoASTExpr>> m_elts; - - GoASTCompositeLit(const GoASTCompositeLit &) = delete; - const GoASTCompositeLit &operator=(const GoASTCompositeLit &) = delete; -}; - -class GoASTDeclStmt : public GoASTStmt { -public: - explicit GoASTDeclStmt(GoASTDecl *decl) - : GoASTStmt(eDeclStmt), m_decl_up(decl) {} - ~GoASTDeclStmt() override = default; - - const char *GetKindName() const override { return "DeclStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eDeclStmt; } - - const GoASTDecl *GetDecl() const { return m_decl_up.get(); } - void SetDecl(GoASTDecl *decl) { m_decl_up.reset(decl); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTDecl> m_decl_up; - - GoASTDeclStmt(const GoASTDeclStmt &) = delete; - const GoASTDeclStmt &operator=(const GoASTDeclStmt &) = delete; -}; - -class GoASTDeferStmt : public GoASTStmt { -public: - explicit GoASTDeferStmt(GoASTCallExpr *call) - : GoASTStmt(eDeferStmt), m_call_up(call) {} - ~GoASTDeferStmt() override = default; - - const char *GetKindName() const override { return "DeferStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eDeferStmt; } - - const GoASTCallExpr *GetCall() const { return m_call_up.get(); } - void SetCall(GoASTCallExpr *call) { m_call_up.reset(call); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTCallExpr> m_call_up; - - GoASTDeferStmt(const GoASTDeferStmt &) = delete; - const GoASTDeferStmt &operator=(const GoASTDeferStmt &) = delete; -}; - -class GoASTEllipsis : public GoASTExpr { -public: - explicit GoASTEllipsis(GoASTExpr *elt) - : GoASTExpr(eEllipsis), m_elt_up(elt) {} - ~GoASTEllipsis() override = default; - - const char *GetKindName() const override { return "Ellipsis"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eEllipsis; } - - const GoASTExpr *GetElt() const { return m_elt_up.get(); } - void SetElt(GoASTExpr *elt) { m_elt_up.reset(elt); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_elt_up; - - GoASTEllipsis(const GoASTEllipsis &) = delete; - const GoASTEllipsis &operator=(const GoASTEllipsis &) = delete; -}; - -class GoASTEmptyStmt : public GoASTStmt { -public: - GoASTEmptyStmt() : GoASTStmt(eEmptyStmt) {} - ~GoASTEmptyStmt() override = default; - - const char *GetKindName() const override { return "EmptyStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eEmptyStmt; } - - GoASTEmptyStmt(const GoASTEmptyStmt &) = delete; - const GoASTEmptyStmt &operator=(const GoASTEmptyStmt &) = delete; -}; - -class GoASTExprStmt : public GoASTStmt { -public: - explicit GoASTExprStmt(GoASTExpr *x) : GoASTStmt(eExprStmt), m_x_up(x) {} - ~GoASTExprStmt() override = default; - - const char *GetKindName() const override { return "ExprStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eExprStmt; } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - - GoASTExprStmt(const GoASTExprStmt &) = delete; - const GoASTExprStmt &operator=(const GoASTExprStmt &) = delete; -}; - -class GoASTField : public GoASTNode { -public: - GoASTField() : GoASTNode(eField) {} - ~GoASTField() override = default; - - const char *GetKindName() const override { return "Field"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eField; } - - size_t NumNames() const { return m_names.size(); } - const GoASTIdent *GetNames(int i) const { return m_names[i].get(); } - void AddNames(GoASTIdent *names) { - m_names.push_back(std::unique_ptr<GoASTIdent>(names)); - } - - const GoASTExpr *GetType() const { return m_type_up.get(); } - void SetType(GoASTExpr *type) { m_type_up.reset(type); } - - const GoASTBasicLit *GetTag() const { return m_tag_up.get(); } - void SetTag(GoASTBasicLit *tag) { m_tag_up.reset(tag); } - -private: - friend class GoASTNode; - std::vector<std::unique_ptr<GoASTIdent>> m_names; - std::unique_ptr<GoASTExpr> m_type_up; - std::unique_ptr<GoASTBasicLit> m_tag_up; - - GoASTField(const GoASTField &) = delete; - const GoASTField &operator=(const GoASTField &) = delete; -}; - -class GoASTFieldList : public GoASTNode { -public: - GoASTFieldList() : GoASTNode(eFieldList) {} - ~GoASTFieldList() override = default; - - const char *GetKindName() const override { return "FieldList"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eFieldList; } - - size_t NumList() const { return m_list.size(); } - const GoASTField *GetList(int i) const { return m_list[i].get(); } - void AddList(GoASTField *list) { - m_list.push_back(std::unique_ptr<GoASTField>(list)); - } - -private: - friend class GoASTNode; - std::vector<std::unique_ptr<GoASTField>> m_list; - - GoASTFieldList(const GoASTFieldList &) = delete; - const GoASTFieldList &operator=(const GoASTFieldList &) = delete; -}; - -class GoASTForStmt : public GoASTStmt { -public: - GoASTForStmt(GoASTStmt *init, GoASTExpr *cond, GoASTStmt *post, - GoASTBlockStmt *body) - : GoASTStmt(eForStmt), m_init_up(init), m_cond_up(cond), m_post_up(post), - m_body_up(body) {} - ~GoASTForStmt() override = default; - - const char *GetKindName() const override { return "ForStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eForStmt; } - - const GoASTStmt *GetInit() const { return m_init_up.get(); } - void SetInit(GoASTStmt *init) { m_init_up.reset(init); } - - const GoASTExpr *GetCond() const { return m_cond_up.get(); } - void SetCond(GoASTExpr *cond) { m_cond_up.reset(cond); } - - const GoASTStmt *GetPost() const { return m_post_up.get(); } - void SetPost(GoASTStmt *post) { m_post_up.reset(post); } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTStmt> m_init_up; - std::unique_ptr<GoASTExpr> m_cond_up; - std::unique_ptr<GoASTStmt> m_post_up; - std::unique_ptr<GoASTBlockStmt> m_body_up; - - GoASTForStmt(const GoASTForStmt &) = delete; - const GoASTForStmt &operator=(const GoASTForStmt &) = delete; -}; - -class GoASTFuncType : public GoASTExpr { -public: - GoASTFuncType(GoASTFieldList *params, GoASTFieldList *results) - : GoASTExpr(eFuncType), m_params_up(params), m_results_up(results) {} - ~GoASTFuncType() override = default; - - const char *GetKindName() const override { return "FuncType"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eFuncType; } - - const GoASTFieldList *GetParams() const { return m_params_up.get(); } - void SetParams(GoASTFieldList *params) { m_params_up.reset(params); } - - const GoASTFieldList *GetResults() const { return m_results_up.get(); } - void SetResults(GoASTFieldList *results) { m_results_up.reset(results); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTFieldList> m_params_up; - std::unique_ptr<GoASTFieldList> m_results_up; - - GoASTFuncType(const GoASTFuncType &) = delete; - const GoASTFuncType &operator=(const GoASTFuncType &) = delete; -}; - -class GoASTFuncDecl : public GoASTDecl { -public: - GoASTFuncDecl(GoASTFieldList *recv, GoASTIdent *name, GoASTFuncType *type, - GoASTBlockStmt *body) - : GoASTDecl(eFuncDecl), m_recv_up(recv), m_name_up(name), m_type_up(type), - m_body_up(body) {} - ~GoASTFuncDecl() override = default; - - const char *GetKindName() const override { return "FuncDecl"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eFuncDecl; } - - const GoASTFieldList *GetRecv() const { return m_recv_up.get(); } - void SetRecv(GoASTFieldList *recv) { m_recv_up.reset(recv); } - - const GoASTIdent *GetName() const { return m_name_up.get(); } - void SetName(GoASTIdent *name) { m_name_up.reset(name); } - - const GoASTFuncType *GetType() const { return m_type_up.get(); } - void SetType(GoASTFuncType *type) { m_type_up.reset(type); } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTFieldList> m_recv_up; - std::unique_ptr<GoASTIdent> m_name_up; - std::unique_ptr<GoASTFuncType> m_type_up; - std::unique_ptr<GoASTBlockStmt> m_body_up; - - GoASTFuncDecl(const GoASTFuncDecl &) = delete; - const GoASTFuncDecl &operator=(const GoASTFuncDecl &) = delete; -}; - -class GoASTFuncLit : public GoASTExpr { -public: - GoASTFuncLit(GoASTFuncType *type, GoASTBlockStmt *body) - : GoASTExpr(eFuncLit), m_type_up(type), m_body_up(body) {} - ~GoASTFuncLit() override = default; - - const char *GetKindName() const override { return "FuncLit"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eFuncLit; } - - const GoASTFuncType *GetType() const { return m_type_up.get(); } - void SetType(GoASTFuncType *type) { m_type_up.reset(type); } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTFuncType> m_type_up; - std::unique_ptr<GoASTBlockStmt> m_body_up; - - GoASTFuncLit(const GoASTFuncLit &) = delete; - const GoASTFuncLit &operator=(const GoASTFuncLit &) = delete; -}; - -class GoASTGenDecl : public GoASTDecl { -public: - explicit GoASTGenDecl(TokenType tok) : GoASTDecl(eGenDecl), m_tok(tok) {} - ~GoASTGenDecl() override = default; - - const char *GetKindName() const override { return "GenDecl"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eGenDecl; } - - TokenType GetTok() const { return m_tok; } - void SetTok(TokenType tok) { m_tok = tok; } - - size_t NumSpecs() const { return m_specs.size(); } - const GoASTSpec *GetSpecs(int i) const { return m_specs[i].get(); } - void AddSpecs(GoASTSpec *specs) { - m_specs.push_back(std::unique_ptr<GoASTSpec>(specs)); - } - -private: - friend class GoASTNode; - TokenType m_tok; - std::vector<std::unique_ptr<GoASTSpec>> m_specs; - - GoASTGenDecl(const GoASTGenDecl &) = delete; - const GoASTGenDecl &operator=(const GoASTGenDecl &) = delete; -}; - -class GoASTGoStmt : public GoASTStmt { -public: - explicit GoASTGoStmt(GoASTCallExpr *call) - : GoASTStmt(eGoStmt), m_call_up(call) {} - ~GoASTGoStmt() override = default; - - const char *GetKindName() const override { return "GoStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eGoStmt; } - - const GoASTCallExpr *GetCall() const { return m_call_up.get(); } - void SetCall(GoASTCallExpr *call) { m_call_up.reset(call); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTCallExpr> m_call_up; - - GoASTGoStmt(const GoASTGoStmt &) = delete; - const GoASTGoStmt &operator=(const GoASTGoStmt &) = delete; -}; - -class GoASTIfStmt : public GoASTStmt { -public: - GoASTIfStmt(GoASTStmt *init, GoASTExpr *cond, GoASTBlockStmt *body, - GoASTStmt *els) - : GoASTStmt(eIfStmt), m_init_up(init), m_cond_up(cond), m_body_up(body), - m_els_up(els) {} - ~GoASTIfStmt() override = default; - - const char *GetKindName() const override { return "IfStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eIfStmt; } - - const GoASTStmt *GetInit() const { return m_init_up.get(); } - void SetInit(GoASTStmt *init) { m_init_up.reset(init); } - - const GoASTExpr *GetCond() const { return m_cond_up.get(); } - void SetCond(GoASTExpr *cond) { m_cond_up.reset(cond); } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - - const GoASTStmt *GetEls() const { return m_els_up.get(); } - void SetEls(GoASTStmt *els) { m_els_up.reset(els); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTStmt> m_init_up; - std::unique_ptr<GoASTExpr> m_cond_up; - std::unique_ptr<GoASTBlockStmt> m_body_up; - std::unique_ptr<GoASTStmt> m_els_up; - - GoASTIfStmt(const GoASTIfStmt &) = delete; - const GoASTIfStmt &operator=(const GoASTIfStmt &) = delete; -}; - -class GoASTImportSpec : public GoASTSpec { -public: - GoASTImportSpec(GoASTIdent *name, GoASTBasicLit *path) - : GoASTSpec(eImportSpec), m_name_up(name), m_path_up(path) {} - ~GoASTImportSpec() override = default; - - const char *GetKindName() const override { return "ImportSpec"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eImportSpec; - } - - const GoASTIdent *GetName() const { return m_name_up.get(); } - void SetName(GoASTIdent *name) { m_name_up.reset(name); } - - const GoASTBasicLit *GetPath() const { return m_path_up.get(); } - void SetPath(GoASTBasicLit *path) { m_path_up.reset(path); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTIdent> m_name_up; - std::unique_ptr<GoASTBasicLit> m_path_up; - - GoASTImportSpec(const GoASTImportSpec &) = delete; - const GoASTImportSpec &operator=(const GoASTImportSpec &) = delete; -}; - -class GoASTIncDecStmt : public GoASTStmt { -public: - GoASTIncDecStmt(GoASTExpr *x, TokenType tok) - : GoASTStmt(eIncDecStmt), m_x_up(x), m_tok(tok) {} - ~GoASTIncDecStmt() override = default; - - const char *GetKindName() const override { return "IncDecStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eIncDecStmt; - } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - - TokenType GetTok() const { return m_tok; } - void SetTok(TokenType tok) { m_tok = tok; } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - TokenType m_tok; - - GoASTIncDecStmt(const GoASTIncDecStmt &) = delete; - const GoASTIncDecStmt &operator=(const GoASTIncDecStmt &) = delete; -}; - -class GoASTIndexExpr : public GoASTExpr { -public: - GoASTIndexExpr(GoASTExpr *x, GoASTExpr *index) - : GoASTExpr(eIndexExpr), m_x_up(x), m_index_up(index) {} - ~GoASTIndexExpr() override = default; - - const char *GetKindName() const override { return "IndexExpr"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eIndexExpr; } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - - const GoASTExpr *GetIndex() const { return m_index_up.get(); } - void SetIndex(GoASTExpr *index) { m_index_up.reset(index); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - std::unique_ptr<GoASTExpr> m_index_up; - - GoASTIndexExpr(const GoASTIndexExpr &) = delete; - const GoASTIndexExpr &operator=(const GoASTIndexExpr &) = delete; -}; - -class GoASTInterfaceType : public GoASTExpr { -public: - explicit GoASTInterfaceType(GoASTFieldList *methods) - : GoASTExpr(eInterfaceType), m_methods_up(methods) {} - ~GoASTInterfaceType() override = default; - - const char *GetKindName() const override { return "InterfaceType"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eInterfaceType; - } - - const GoASTFieldList *GetMethods() const { return m_methods_up.get(); } - void SetMethods(GoASTFieldList *methods) { m_methods_up.reset(methods); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTFieldList> m_methods_up; - - GoASTInterfaceType(const GoASTInterfaceType &) = delete; - const GoASTInterfaceType &operator=(const GoASTInterfaceType &) = delete; -}; - -class GoASTKeyValueExpr : public GoASTExpr { -public: - GoASTKeyValueExpr(GoASTExpr *key, GoASTExpr *value) - : GoASTExpr(eKeyValueExpr), m_key_up(key), m_value_up(value) {} - ~GoASTKeyValueExpr() override = default; - - const char *GetKindName() const override { return "KeyValueExpr"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eKeyValueExpr; - } - - const GoASTExpr *GetKey() const { return m_key_up.get(); } - void SetKey(GoASTExpr *key) { m_key_up.reset(key); } - - const GoASTExpr *GetValue() const { return m_value_up.get(); } - void SetValue(GoASTExpr *value) { m_value_up.reset(value); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_key_up; - std::unique_ptr<GoASTExpr> m_value_up; - - GoASTKeyValueExpr(const GoASTKeyValueExpr &) = delete; - const GoASTKeyValueExpr &operator=(const GoASTKeyValueExpr &) = delete; -}; - -class GoASTLabeledStmt : public GoASTStmt { -public: - GoASTLabeledStmt(GoASTIdent *label, GoASTStmt *stmt) - : GoASTStmt(eLabeledStmt), m_label_up(label), m_stmt_up(stmt) {} - ~GoASTLabeledStmt() override = default; - - const char *GetKindName() const override { return "LabeledStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eLabeledStmt; - } - - const GoASTIdent *GetLabel() const { return m_label_up.get(); } - void SetLabel(GoASTIdent *label) { m_label_up.reset(label); } - - const GoASTStmt *GetStmt() const { return m_stmt_up.get(); } - void SetStmt(GoASTStmt *stmt) { m_stmt_up.reset(stmt); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTIdent> m_label_up; - std::unique_ptr<GoASTStmt> m_stmt_up; - - GoASTLabeledStmt(const GoASTLabeledStmt &) = delete; - const GoASTLabeledStmt &operator=(const GoASTLabeledStmt &) = delete; -}; - -class GoASTMapType : public GoASTExpr { -public: - GoASTMapType(GoASTExpr *key, GoASTExpr *value) - : GoASTExpr(eMapType), m_key_up(key), m_value_up(value) {} - ~GoASTMapType() override = default; - - const char *GetKindName() const override { return "MapType"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eMapType; } - - const GoASTExpr *GetKey() const { return m_key_up.get(); } - void SetKey(GoASTExpr *key) { m_key_up.reset(key); } - - const GoASTExpr *GetValue() const { return m_value_up.get(); } - void SetValue(GoASTExpr *value) { m_value_up.reset(value); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_key_up; - std::unique_ptr<GoASTExpr> m_value_up; - - GoASTMapType(const GoASTMapType &) = delete; - const GoASTMapType &operator=(const GoASTMapType &) = delete; -}; - -class GoASTParenExpr : public GoASTExpr { -public: - explicit GoASTParenExpr(GoASTExpr *x) : GoASTExpr(eParenExpr), m_x_up(x) {} - ~GoASTParenExpr() override = default; - - const char *GetKindName() const override { return "ParenExpr"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eParenExpr; } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - - GoASTParenExpr(const GoASTParenExpr &) = delete; - const GoASTParenExpr &operator=(const GoASTParenExpr &) = delete; -}; - -class GoASTRangeStmt : public GoASTStmt { -public: - GoASTRangeStmt(GoASTExpr *key, GoASTExpr *value, bool define, GoASTExpr *x, - GoASTBlockStmt *body) - : GoASTStmt(eRangeStmt), m_key_up(key), m_value_up(value), - m_define(define), m_x_up(x), m_body_up(body) {} - ~GoASTRangeStmt() override = default; - - const char *GetKindName() const override { return "RangeStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eRangeStmt; } - - const GoASTExpr *GetKey() const { return m_key_up.get(); } - void SetKey(GoASTExpr *key) { m_key_up.reset(key); } - - const GoASTExpr *GetValue() const { return m_value_up.get(); } - void SetValue(GoASTExpr *value) { m_value_up.reset(value); } - - bool GetDefine() const { return m_define; } - void SetDefine(bool define) { m_define = define; } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_key_up; - std::unique_ptr<GoASTExpr> m_value_up; - bool m_define; - std::unique_ptr<GoASTExpr> m_x_up; - std::unique_ptr<GoASTBlockStmt> m_body_up; - - GoASTRangeStmt(const GoASTRangeStmt &) = delete; - const GoASTRangeStmt &operator=(const GoASTRangeStmt &) = delete; -}; - -class GoASTReturnStmt : public GoASTStmt { -public: - GoASTReturnStmt() : GoASTStmt(eReturnStmt) {} - ~GoASTReturnStmt() override = default; - - const char *GetKindName() const override { return "ReturnStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eReturnStmt; - } - - size_t NumResults() const { return m_results.size(); } - const GoASTExpr *GetResults(int i) const { return m_results[i].get(); } - void AddResults(GoASTExpr *results) { - m_results.push_back(std::unique_ptr<GoASTExpr>(results)); - } - -private: - friend class GoASTNode; - std::vector<std::unique_ptr<GoASTExpr>> m_results; - - GoASTReturnStmt(const GoASTReturnStmt &) = delete; - const GoASTReturnStmt &operator=(const GoASTReturnStmt &) = delete; -}; - -class GoASTSelectStmt : public GoASTStmt { -public: - explicit GoASTSelectStmt(GoASTBlockStmt *body) - : GoASTStmt(eSelectStmt), m_body_up(body) {} - ~GoASTSelectStmt() override = default; - - const char *GetKindName() const override { return "SelectStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eSelectStmt; - } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTBlockStmt> m_body_up; - - GoASTSelectStmt(const GoASTSelectStmt &) = delete; - const GoASTSelectStmt &operator=(const GoASTSelectStmt &) = delete; -}; - -class GoASTSelectorExpr : public GoASTExpr { -public: - GoASTSelectorExpr(GoASTExpr *x, GoASTIdent *sel) - : GoASTExpr(eSelectorExpr), m_x_up(x), m_sel_up(sel) {} - ~GoASTSelectorExpr() override = default; - - const char *GetKindName() const override { return "SelectorExpr"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eSelectorExpr; - } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - - const GoASTIdent *GetSel() const { return m_sel_up.get(); } - void SetSel(GoASTIdent *sel) { m_sel_up.reset(sel); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - std::unique_ptr<GoASTIdent> m_sel_up; - - GoASTSelectorExpr(const GoASTSelectorExpr &) = delete; - const GoASTSelectorExpr &operator=(const GoASTSelectorExpr &) = delete; -}; - -class GoASTSendStmt : public GoASTStmt { -public: - GoASTSendStmt(GoASTExpr *chan, GoASTExpr *value) - : GoASTStmt(eSendStmt), m_chan_up(chan), m_value_up(value) {} - ~GoASTSendStmt() override = default; - - const char *GetKindName() const override { return "SendStmt"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eSendStmt; } - - const GoASTExpr *GetChan() const { return m_chan_up.get(); } - void SetChan(GoASTExpr *chan) { m_chan_up.reset(chan); } - - const GoASTExpr *GetValue() const { return m_value_up.get(); } - void SetValue(GoASTExpr *value) { m_value_up.reset(value); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_chan_up; - std::unique_ptr<GoASTExpr> m_value_up; - - GoASTSendStmt(const GoASTSendStmt &) = delete; - const GoASTSendStmt &operator=(const GoASTSendStmt &) = delete; -}; - -class GoASTSliceExpr : public GoASTExpr { -public: - GoASTSliceExpr(GoASTExpr *x, GoASTExpr *low, GoASTExpr *high, GoASTExpr *max, - bool slice3) - : GoASTExpr(eSliceExpr), m_x_up(x), m_low_up(low), m_high_up(high), - m_max_up(max), m_slice3(slice3) {} - ~GoASTSliceExpr() override = default; - - const char *GetKindName() const override { return "SliceExpr"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eSliceExpr; } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - - const GoASTExpr *GetLow() const { return m_low_up.get(); } - void SetLow(GoASTExpr *low) { m_low_up.reset(low); } - - const GoASTExpr *GetHigh() const { return m_high_up.get(); } - void SetHigh(GoASTExpr *high) { m_high_up.reset(high); } - - const GoASTExpr *GetMax() const { return m_max_up.get(); } - void SetMax(GoASTExpr *max) { m_max_up.reset(max); } - - bool GetSlice3() const { return m_slice3; } - void SetSlice3(bool slice3) { m_slice3 = slice3; } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - std::unique_ptr<GoASTExpr> m_low_up; - std::unique_ptr<GoASTExpr> m_high_up; - std::unique_ptr<GoASTExpr> m_max_up; - bool m_slice3; - - GoASTSliceExpr(const GoASTSliceExpr &) = delete; - const GoASTSliceExpr &operator=(const GoASTSliceExpr &) = delete; -}; - -class GoASTStarExpr : public GoASTExpr { -public: - explicit GoASTStarExpr(GoASTExpr *x) : GoASTExpr(eStarExpr), m_x_up(x) {} - ~GoASTStarExpr() override = default; - - const char *GetKindName() const override { return "StarExpr"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eStarExpr; } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - - GoASTStarExpr(const GoASTStarExpr &) = delete; - const GoASTStarExpr &operator=(const GoASTStarExpr &) = delete; -}; - -class GoASTStructType : public GoASTExpr { -public: - explicit GoASTStructType(GoASTFieldList *fields) - : GoASTExpr(eStructType), m_fields_up(fields) {} - ~GoASTStructType() override = default; - - const char *GetKindName() const override { return "StructType"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eStructType; - } - - const GoASTFieldList *GetFields() const { return m_fields_up.get(); } - void SetFields(GoASTFieldList *fields) { m_fields_up.reset(fields); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTFieldList> m_fields_up; - - GoASTStructType(const GoASTStructType &) = delete; - const GoASTStructType &operator=(const GoASTStructType &) = delete; -}; - -class GoASTSwitchStmt : public GoASTStmt { -public: - GoASTSwitchStmt(GoASTStmt *init, GoASTExpr *tag, GoASTBlockStmt *body) - : GoASTStmt(eSwitchStmt), m_init_up(init), m_tag_up(tag), - m_body_up(body) {} - ~GoASTSwitchStmt() override = default; - - const char *GetKindName() const override { return "SwitchStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eSwitchStmt; - } - - const GoASTStmt *GetInit() const { return m_init_up.get(); } - void SetInit(GoASTStmt *init) { m_init_up.reset(init); } - - const GoASTExpr *GetTag() const { return m_tag_up.get(); } - void SetTag(GoASTExpr *tag) { m_tag_up.reset(tag); } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTStmt> m_init_up; - std::unique_ptr<GoASTExpr> m_tag_up; - std::unique_ptr<GoASTBlockStmt> m_body_up; - - GoASTSwitchStmt(const GoASTSwitchStmt &) = delete; - const GoASTSwitchStmt &operator=(const GoASTSwitchStmt &) = delete; -}; - -class GoASTTypeAssertExpr : public GoASTExpr { -public: - GoASTTypeAssertExpr(GoASTExpr *x, GoASTExpr *type) - : GoASTExpr(eTypeAssertExpr), m_x_up(x), m_type_up(type) {} - ~GoASTTypeAssertExpr() override = default; - - const char *GetKindName() const override { return "TypeAssertExpr"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eTypeAssertExpr; - } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - - const GoASTExpr *GetType() const { return m_type_up.get(); } - void SetType(GoASTExpr *type) { m_type_up.reset(type); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTExpr> m_x_up; - std::unique_ptr<GoASTExpr> m_type_up; - - GoASTTypeAssertExpr(const GoASTTypeAssertExpr &) = delete; - const GoASTTypeAssertExpr &operator=(const GoASTTypeAssertExpr &) = delete; -}; - -class GoASTTypeSpec : public GoASTSpec { -public: - GoASTTypeSpec(GoASTIdent *name, GoASTExpr *type) - : GoASTSpec(eTypeSpec), m_name_up(name), m_type_up(type) {} - ~GoASTTypeSpec() override = default; - - const char *GetKindName() const override { return "TypeSpec"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eTypeSpec; } - - const GoASTIdent *GetName() const { return m_name_up.get(); } - void SetName(GoASTIdent *name) { m_name_up.reset(name); } - - const GoASTExpr *GetType() const { return m_type_up.get(); } - void SetType(GoASTExpr *type) { m_type_up.reset(type); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTIdent> m_name_up; - std::unique_ptr<GoASTExpr> m_type_up; - - GoASTTypeSpec(const GoASTTypeSpec &) = delete; - const GoASTTypeSpec &operator=(const GoASTTypeSpec &) = delete; -}; - -class GoASTTypeSwitchStmt : public GoASTStmt { -public: - GoASTTypeSwitchStmt(GoASTStmt *init, GoASTStmt *assign, GoASTBlockStmt *body) - : GoASTStmt(eTypeSwitchStmt), m_init_up(init), m_assign_up(assign), - m_body_up(body) {} - ~GoASTTypeSwitchStmt() override = default; - - const char *GetKindName() const override { return "TypeSwitchStmt"; } - - static bool classof(const GoASTNode *n) { - return n->GetKind() == eTypeSwitchStmt; - } - - const GoASTStmt *GetInit() const { return m_init_up.get(); } - void SetInit(GoASTStmt *init) { m_init_up.reset(init); } - - const GoASTStmt *GetAssign() const { return m_assign_up.get(); } - void SetAssign(GoASTStmt *assign) { m_assign_up.reset(assign); } - - const GoASTBlockStmt *GetBody() const { return m_body_up.get(); } - void SetBody(GoASTBlockStmt *body) { m_body_up.reset(body); } - -private: - friend class GoASTNode; - std::unique_ptr<GoASTStmt> m_init_up; - std::unique_ptr<GoASTStmt> m_assign_up; - std::unique_ptr<GoASTBlockStmt> m_body_up; - - GoASTTypeSwitchStmt(const GoASTTypeSwitchStmt &) = delete; - const GoASTTypeSwitchStmt &operator=(const GoASTTypeSwitchStmt &) = delete; -}; - -class GoASTUnaryExpr : public GoASTExpr { -public: - GoASTUnaryExpr(TokenType op, GoASTExpr *x) - : GoASTExpr(eUnaryExpr), m_op(op), m_x_up(x) {} - ~GoASTUnaryExpr() override = default; - - const char *GetKindName() const override { return "UnaryExpr"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eUnaryExpr; } - - TokenType GetOp() const { return m_op; } - void SetOp(TokenType op) { m_op = op; } - - const GoASTExpr *GetX() const { return m_x_up.get(); } - void SetX(GoASTExpr *x) { m_x_up.reset(x); } - -private: - friend class GoASTNode; - TokenType m_op; - std::unique_ptr<GoASTExpr> m_x_up; - - GoASTUnaryExpr(const GoASTUnaryExpr &) = delete; - const GoASTUnaryExpr &operator=(const GoASTUnaryExpr &) = delete; -}; - -class GoASTValueSpec : public GoASTSpec { -public: - GoASTValueSpec() : GoASTSpec(eValueSpec) {} - ~GoASTValueSpec() override = default; - - const char *GetKindName() const override { return "ValueSpec"; } - - static bool classof(const GoASTNode *n) { return n->GetKind() == eValueSpec; } - - size_t NumNames() const { return m_names.size(); } - const GoASTIdent *GetNames(int i) const { return m_names[i].get(); } - void AddNames(GoASTIdent *names) { - m_names.push_back(std::unique_ptr<GoASTIdent>(names)); - } - - const GoASTExpr *GetType() const { return m_type_up.get(); } - void SetType(GoASTExpr *type) { m_type_up.reset(type); } - - size_t NumValues() const { return m_values.size(); } - const GoASTExpr *GetValues(int i) const { return m_values[i].get(); } - void AddValues(GoASTExpr *values) { - m_values.push_back(std::unique_ptr<GoASTExpr>(values)); - } - -private: - friend class GoASTNode; - std::vector<std::unique_ptr<GoASTIdent>> m_names; - std::unique_ptr<GoASTExpr> m_type_up; - std::vector<std::unique_ptr<GoASTExpr>> m_values; - - GoASTValueSpec(const GoASTValueSpec &) = delete; - const GoASTValueSpec &operator=(const GoASTValueSpec &) = delete; -}; - -template <typename R, typename V> R GoASTDecl::Visit(V *v) const { - switch (GetKind()) { - case eBadDecl: - return v->VisitBadDecl(llvm::cast<const GoASTBadDecl>(this)); - case eFuncDecl: - return v->VisitFuncDecl(llvm::cast<const GoASTFuncDecl>(this)); - case eGenDecl: - return v->VisitGenDecl(llvm::cast<const GoASTGenDecl>(this)); - default: - assert(false && "Invalid kind"); - } -} - -template <typename R, typename V> R GoASTExpr::Visit(V *v) const { - switch (GetKind()) { - case eArrayType: - return v->VisitArrayType(llvm::cast<const GoASTArrayType>(this)); - case eBadExpr: - return v->VisitBadExpr(llvm::cast<const GoASTBadExpr>(this)); - case eBasicLit: - return v->VisitBasicLit(llvm::cast<const GoASTBasicLit>(this)); - case eBinaryExpr: - return v->VisitBinaryExpr(llvm::cast<const GoASTBinaryExpr>(this)); - case eIdent: - return v->VisitIdent(llvm::cast<const GoASTIdent>(this)); - case eCallExpr: - return v->VisitCallExpr(llvm::cast<const GoASTCallExpr>(this)); - case eChanType: - return v->VisitChanType(llvm::cast<const GoASTChanType>(this)); - case eCompositeLit: - return v->VisitCompositeLit(llvm::cast<const GoASTCompositeLit>(this)); - case eEllipsis: - return v->VisitEllipsis(llvm::cast<const GoASTEllipsis>(this)); - case eFuncType: - return v->VisitFuncType(llvm::cast<const GoASTFuncType>(this)); - case eFuncLit: - return v->VisitFuncLit(llvm::cast<const GoASTFuncLit>(this)); - case eIndexExpr: - return v->VisitIndexExpr(llvm::cast<const GoASTIndexExpr>(this)); - case eInterfaceType: - return v->VisitInterfaceType(llvm::cast<const GoASTInterfaceType>(this)); - case eKeyValueExpr: - return v->VisitKeyValueExpr(llvm::cast<const GoASTKeyValueExpr>(this)); - case eMapType: - return v->VisitMapType(llvm::cast<const GoASTMapType>(this)); - case eParenExpr: - return v->VisitParenExpr(llvm::cast<const GoASTParenExpr>(this)); - case eSelectorExpr: - return v->VisitSelectorExpr(llvm::cast<const GoASTSelectorExpr>(this)); - case eSliceExpr: - return v->VisitSliceExpr(llvm::cast<const GoASTSliceExpr>(this)); - case eStarExpr: - return v->VisitStarExpr(llvm::cast<const GoASTStarExpr>(this)); - case eStructType: - return v->VisitStructType(llvm::cast<const GoASTStructType>(this)); - case eTypeAssertExpr: - return v->VisitTypeAssertExpr(llvm::cast<const GoASTTypeAssertExpr>(this)); - case eUnaryExpr: - return v->VisitUnaryExpr(llvm::cast<const GoASTUnaryExpr>(this)); - default: - assert(false && "Invalid kind"); - return R(); - } -} - -template <typename R, typename V> R GoASTSpec::Visit(V *v) const { - switch (GetKind()) { - case eImportSpec: - return v->VisitImportSpec(llvm::cast<const GoASTImportSpec>(this)); - case eTypeSpec: - return v->VisitTypeSpec(llvm::cast<const GoASTTypeSpec>(this)); - case eValueSpec: - return v->VisitValueSpec(llvm::cast<const GoASTValueSpec>(this)); - default: - assert(false && "Invalid kind"); - } -} - -template <typename R, typename V> R GoASTStmt::Visit(V *v) const { - switch (GetKind()) { - case eAssignStmt: - return v->VisitAssignStmt(llvm::cast<const GoASTAssignStmt>(this)); - case eBadStmt: - return v->VisitBadStmt(llvm::cast<const GoASTBadStmt>(this)); - case eBlockStmt: - return v->VisitBlockStmt(llvm::cast<const GoASTBlockStmt>(this)); - case eBranchStmt: - return v->VisitBranchStmt(llvm::cast<const GoASTBranchStmt>(this)); - case eCaseClause: - return v->VisitCaseClause(llvm::cast<const GoASTCaseClause>(this)); - case eCommClause: - return v->VisitCommClause(llvm::cast<const GoASTCommClause>(this)); - case eDeclStmt: - return v->VisitDeclStmt(llvm::cast<const GoASTDeclStmt>(this)); - case eDeferStmt: - return v->VisitDeferStmt(llvm::cast<const GoASTDeferStmt>(this)); - case eEmptyStmt: - return v->VisitEmptyStmt(llvm::cast<const GoASTEmptyStmt>(this)); - case eExprStmt: - return v->VisitExprStmt(llvm::cast<const GoASTExprStmt>(this)); - case eForStmt: - return v->VisitForStmt(llvm::cast<const GoASTForStmt>(this)); - case eGoStmt: - return v->VisitGoStmt(llvm::cast<const GoASTGoStmt>(this)); - case eIfStmt: - return v->VisitIfStmt(llvm::cast<const GoASTIfStmt>(this)); - case eIncDecStmt: - return v->VisitIncDecStmt(llvm::cast<const GoASTIncDecStmt>(this)); - case eLabeledStmt: - return v->VisitLabeledStmt(llvm::cast<const GoASTLabeledStmt>(this)); - case eRangeStmt: - return v->VisitRangeStmt(llvm::cast<const GoASTRangeStmt>(this)); - case eReturnStmt: - return v->VisitReturnStmt(llvm::cast<const GoASTReturnStmt>(this)); - case eSelectStmt: - return v->VisitSelectStmt(llvm::cast<const GoASTSelectStmt>(this)); - case eSendStmt: - return v->VisitSendStmt(llvm::cast<const GoASTSendStmt>(this)); - case eSwitchStmt: - return v->VisitSwitchStmt(llvm::cast<const GoASTSwitchStmt>(this)); - case eTypeSwitchStmt: - return v->VisitTypeSwitchStmt(llvm::cast<const GoASTTypeSwitchStmt>(this)); - default: - assert(false && "Invalid kind"); - } -} - -template <typename V> void GoASTNode::WalkChildren(V &v) { - switch (m_kind) { - - case eArrayType: { - GoASTArrayType *n = llvm::cast<GoASTArrayType>(this); - (void)n; - v(n->m_len_up.get()); - v(n->m_elt_up.get()); - return; - } - case eAssignStmt: { - GoASTAssignStmt *n = llvm::cast<GoASTAssignStmt>(this); - (void)n; - for (auto &e : n->m_lhs) { - v(e.get()); - } - for (auto &e : n->m_rhs) { - v(e.get()); - } - return; - } - case eBasicLit: { - GoASTBasicLit *n = llvm::cast<GoASTBasicLit>(this); - (void)n; - return; - } - case eBinaryExpr: { - GoASTBinaryExpr *n = llvm::cast<GoASTBinaryExpr>(this); - (void)n; - v(n->m_x_up.get()); - v(n->m_y_up.get()); - return; - } - case eBlockStmt: { - GoASTBlockStmt *n = llvm::cast<GoASTBlockStmt>(this); - (void)n; - for (auto &e : n->m_list) { - v(e.get()); - } - return; - } - case eIdent: { - GoASTIdent *n = llvm::cast<GoASTIdent>(this); - (void)n; - return; - } - case eBranchStmt: { - GoASTBranchStmt *n = llvm::cast<GoASTBranchStmt>(this); - (void)n; - v(n->m_label_up.get()); - return; - } - case eCallExpr: { - GoASTCallExpr *n = llvm::cast<GoASTCallExpr>(this); - (void)n; - v(n->m_fun_up.get()); - for (auto &e : n->m_args) { - v(e.get()); - } - return; - } - case eCaseClause: { - GoASTCaseClause *n = llvm::cast<GoASTCaseClause>(this); - (void)n; - for (auto &e : n->m_list) { - v(e.get()); - } - for (auto &e : n->m_body) { - v(e.get()); - } - return; - } - case eChanType: { - GoASTChanType *n = llvm::cast<GoASTChanType>(this); - (void)n; - v(n->m_value_up.get()); - return; - } - case eCommClause: { - GoASTCommClause *n = llvm::cast<GoASTCommClause>(this); - (void)n; - v(n->m_comm_up.get()); - for (auto &e : n->m_body) { - v(e.get()); - } - return; - } - case eCompositeLit: { - GoASTCompositeLit *n = llvm::cast<GoASTCompositeLit>(this); - (void)n; - v(n->m_type_up.get()); - for (auto &e : n->m_elts) { - v(e.get()); - } - return; - } - case eDeclStmt: { - GoASTDeclStmt *n = llvm::cast<GoASTDeclStmt>(this); - (void)n; - v(n->m_decl_up.get()); - return; - } - case eDeferStmt: { - GoASTDeferStmt *n = llvm::cast<GoASTDeferStmt>(this); - (void)n; - v(n->m_call_up.get()); - return; - } - case eEllipsis: { - GoASTEllipsis *n = llvm::cast<GoASTEllipsis>(this); - (void)n; - v(n->m_elt_up.get()); - return; - } - case eExprStmt: { - GoASTExprStmt *n = llvm::cast<GoASTExprStmt>(this); - (void)n; - v(n->m_x_up.get()); - return; - } - case eField: { - GoASTField *n = llvm::cast<GoASTField>(this); - (void)n; - for (auto &e : n->m_names) { - v(e.get()); - } - v(n->m_type_up.get()); - v(n->m_tag_up.get()); - return; - } - case eFieldList: { - GoASTFieldList *n = llvm::cast<GoASTFieldList>(this); - (void)n; - for (auto &e : n->m_list) { - v(e.get()); - } - return; - } - case eForStmt: { - GoASTForStmt *n = llvm::cast<GoASTForStmt>(this); - (void)n; - v(n->m_init_up.get()); - v(n->m_cond_up.get()); - v(n->m_post_up.get()); - v(n->m_body_up.get()); - return; - } - case eFuncType: { - GoASTFuncType *n = llvm::cast<GoASTFuncType>(this); - (void)n; - v(n->m_params_up.get()); - v(n->m_results_up.get()); - return; - } - case eFuncDecl: { - GoASTFuncDecl *n = llvm::cast<GoASTFuncDecl>(this); - (void)n; - v(n->m_recv_up.get()); - v(n->m_name_up.get()); - v(n->m_type_up.get()); - v(n->m_body_up.get()); - return; - } - case eFuncLit: { - GoASTFuncLit *n = llvm::cast<GoASTFuncLit>(this); - (void)n; - v(n->m_type_up.get()); - v(n->m_body_up.get()); - return; - } - case eGenDecl: { - GoASTGenDecl *n = llvm::cast<GoASTGenDecl>(this); - (void)n; - for (auto &e : n->m_specs) { - v(e.get()); - } - return; - } - case eGoStmt: { - GoASTGoStmt *n = llvm::cast<GoASTGoStmt>(this); - (void)n; - v(n->m_call_up.get()); - return; - } - case eIfStmt: { - GoASTIfStmt *n = llvm::cast<GoASTIfStmt>(this); - (void)n; - v(n->m_init_up.get()); - v(n->m_cond_up.get()); - v(n->m_body_up.get()); - v(n->m_els_up.get()); - return; - } - case eImportSpec: { - GoASTImportSpec *n = llvm::cast<GoASTImportSpec>(this); - (void)n; - v(n->m_name_up.get()); - v(n->m_path_up.get()); - return; - } - case eIncDecStmt: { - GoASTIncDecStmt *n = llvm::cast<GoASTIncDecStmt>(this); - (void)n; - v(n->m_x_up.get()); - return; - } - case eIndexExpr: { - GoASTIndexExpr *n = llvm::cast<GoASTIndexExpr>(this); - (void)n; - v(n->m_x_up.get()); - v(n->m_index_up.get()); - return; - } - case eInterfaceType: { - GoASTInterfaceType *n = llvm::cast<GoASTInterfaceType>(this); - (void)n; - v(n->m_methods_up.get()); - return; - } - case eKeyValueExpr: { - GoASTKeyValueExpr *n = llvm::cast<GoASTKeyValueExpr>(this); - (void)n; - v(n->m_key_up.get()); - v(n->m_value_up.get()); - return; - } - case eLabeledStmt: { - GoASTLabeledStmt *n = llvm::cast<GoASTLabeledStmt>(this); - (void)n; - v(n->m_label_up.get()); - v(n->m_stmt_up.get()); - return; - } - case eMapType: { - GoASTMapType *n = llvm::cast<GoASTMapType>(this); - (void)n; - v(n->m_key_up.get()); - v(n->m_value_up.get()); - return; - } - case eParenExpr: { - GoASTParenExpr *n = llvm::cast<GoASTParenExpr>(this); - (void)n; - v(n->m_x_up.get()); - return; - } - case eRangeStmt: { - GoASTRangeStmt *n = llvm::cast<GoASTRangeStmt>(this); - (void)n; - v(n->m_key_up.get()); - v(n->m_value_up.get()); - v(n->m_x_up.get()); - v(n->m_body_up.get()); - return; - } - case eReturnStmt: { - GoASTReturnStmt *n = llvm::cast<GoASTReturnStmt>(this); - (void)n; - for (auto &e : n->m_results) { - v(e.get()); - } - return; - } - case eSelectStmt: { - GoASTSelectStmt *n = llvm::cast<GoASTSelectStmt>(this); - (void)n; - v(n->m_body_up.get()); - return; - } - case eSelectorExpr: { - GoASTSelectorExpr *n = llvm::cast<GoASTSelectorExpr>(this); - (void)n; - v(n->m_x_up.get()); - v(n->m_sel_up.get()); - return; - } - case eSendStmt: { - GoASTSendStmt *n = llvm::cast<GoASTSendStmt>(this); - (void)n; - v(n->m_chan_up.get()); - v(n->m_value_up.get()); - return; - } - case eSliceExpr: { - GoASTSliceExpr *n = llvm::cast<GoASTSliceExpr>(this); - (void)n; - v(n->m_x_up.get()); - v(n->m_low_up.get()); - v(n->m_high_up.get()); - v(n->m_max_up.get()); - return; - } - case eStarExpr: { - GoASTStarExpr *n = llvm::cast<GoASTStarExpr>(this); - (void)n; - v(n->m_x_up.get()); - return; - } - case eStructType: { - GoASTStructType *n = llvm::cast<GoASTStructType>(this); - (void)n; - v(n->m_fields_up.get()); - return; - } - case eSwitchStmt: { - GoASTSwitchStmt *n = llvm::cast<GoASTSwitchStmt>(this); - (void)n; - v(n->m_init_up.get()); - v(n->m_tag_up.get()); - v(n->m_body_up.get()); - return; - } - case eTypeAssertExpr: { - GoASTTypeAssertExpr *n = llvm::cast<GoASTTypeAssertExpr>(this); - (void)n; - v(n->m_x_up.get()); - v(n->m_type_up.get()); - return; - } - case eTypeSpec: { - GoASTTypeSpec *n = llvm::cast<GoASTTypeSpec>(this); - (void)n; - v(n->m_name_up.get()); - v(n->m_type_up.get()); - return; - } - case eTypeSwitchStmt: { - GoASTTypeSwitchStmt *n = llvm::cast<GoASTTypeSwitchStmt>(this); - (void)n; - v(n->m_init_up.get()); - v(n->m_assign_up.get()); - v(n->m_body_up.get()); - return; - } - case eUnaryExpr: { - GoASTUnaryExpr *n = llvm::cast<GoASTUnaryExpr>(this); - (void)n; - v(n->m_x_up.get()); - return; - } - case eValueSpec: { - GoASTValueSpec *n = llvm::cast<GoASTValueSpec>(this); - (void)n; - for (auto &e : n->m_names) { - v(e.get()); - } - v(n->m_type_up.get()); - for (auto &e : n->m_values) { - v(e.get()); - } - return; - } - - case eEmptyStmt: - case eBadDecl: - case eBadExpr: - case eBadStmt: - break; - } -} - -} // namespace lldb_private - -#endif |