#include "Node.hpp" namespace jk { /*explicit*/ Node::Node(NodeType type, std::string const& repr, Loc const& loc) : m_type { type } , m_repr { repr } , m_loc { loc } { } /*virtual*/ Node::~Node() { } void Node::add_child(std::shared_ptr child) { m_children.push_back(child); } std::weak_ptr Node::child(size_t index) const { assert(index < size()); return m_children[index]; } std::string Node::string() const { std::stringstream ss; ss << std::string(NodeTypeStr[m_type]) .substr(std::string("NODE_").size()); if (m_repr.empty() == false) { ss << "[" << m_repr << "]"; } if (size() > 0) { ss << "("; std::string sep; for (auto child: m_children) { ss << sep << child->string(); sep = ","; } ss << ")"; } return ss.str(); } }