diff --git a/src/node/nodebuilder.cpp b/src/node/nodebuilder.cpp index 27301b6..cd5d0d1 100644 --- a/src/node/nodebuilder.cpp +++ b/src/node/nodebuilder.cpp @@ -41,7 +41,7 @@ namespace YAML void NodeBuilder::OnAlias(const Mark& /*mark*/, anchor_t anchor) { detail::node& node = *m_anchors[anchor]; - m_stack.push_back(&node); + Push(node); Pop(); } @@ -78,17 +78,20 @@ namespace YAML } detail::node& NodeBuilder::Push(anchor_t anchor) + { + detail::node& node = m_pMemory->create_node(); + RegisterAnchor(anchor, node); + Push(node); + return node; + } + + void NodeBuilder::Push(detail::node& node) { const bool needsKey = (!m_stack.empty() && m_stack.back()->type() == NodeType::Map && m_keys.size() < m_mapDepth); - detail::node& node = m_pMemory->create_node(); m_stack.push_back(&node); - RegisterAnchor(anchor, node); - if(needsKey) - m_keys.push_back(Key(&node, false)); - - return node; + m_keys.push_back(PushedKey(&node, false)); } void NodeBuilder::Pop() @@ -108,7 +111,8 @@ namespace YAML if(collection.type() == NodeType::Sequence) { collection.append(node, m_pMemory); } else if(collection.type() == NodeType::Map) { - Key& key = m_keys.back(); + assert(!m_keys.empty()); + PushedKey& key = m_keys.back(); if(key.second) { collection.insert(*key.first, node, m_pMemory); m_keys.pop_back(); diff --git a/src/node/nodebuilder.h b/src/node/nodebuilder.h index 3f9c209..cce91d3 100644 --- a/src/node/nodebuilder.h +++ b/src/node/nodebuilder.h @@ -36,6 +36,7 @@ namespace YAML private: detail::node& Push(anchor_t anchor); + void Push(detail::node& node); void Pop(); void RegisterAnchor(anchor_t anchor, detail::node& node); @@ -47,8 +48,8 @@ namespace YAML Nodes m_stack; Nodes m_anchors; - typedef std::pair Key; - std::vector m_keys; + typedef std::pair PushedKey; + std::vector m_keys; std::size_t m_mapDepth; }; }