#ifndef jk_NODE_HPP #define jk_NODE_HPP #include "commons.hpp" #include "Loc.hpp" #define NODE_TYPE(G) \ G(NODE_PROG), \ G(NODE_INT) namespace jk { JK_ENUM(Node, NODE_TYPE); class Node { public: explicit Node(NodeType type, std::string const& repr, Loc const& loc); virtual ~Node(); NodeType type() const { return m_type; } std::string repr() const { return m_repr; } Loc const& loc() const { return m_loc; } size_t size() const { return m_children.size(); } void add_child(std::shared_ptr child); std::weak_ptr child(size_t index) const; std::string string() const; private: NodeType m_type; std::string m_repr; Loc m_loc; std::vector> m_children; }; } #endif