| 249 | } |
| 250 | |
| 251 | void SingleDocParser::HandleBlockMap(EventHandler& eventHandler) { |
| 252 | // eat start token |
| 253 | m_scanner.pop(); |
| 254 | m_pCollectionStack->PushCollectionType(CollectionType::BlockMap); |
| 255 | |
| 256 | while (true) { |
| 257 | if (m_scanner.empty()) |
| 258 | throw ParserException(m_scanner.mark(), ErrorMsg::END_OF_MAP); |
| 259 | |
| 260 | Token token = m_scanner.peek(); |
| 261 | if (token.type != Token::KEY && token.type != Token::VALUE && |
| 262 | token.type != Token::BLOCK_MAP_END) |
| 263 | throw ParserException(token.mark, ErrorMsg::END_OF_MAP); |
| 264 | |
| 265 | if (token.type == Token::BLOCK_MAP_END) { |
| 266 | m_scanner.pop(); |
| 267 | break; |
| 268 | } |
| 269 | |
| 270 | // grab key (if non-null) |
| 271 | if (token.type == Token::KEY) { |
| 272 | m_scanner.pop(); |
| 273 | HandleNode(eventHandler); |
| 274 | } else { |
| 275 | eventHandler.OnNull(token.mark, NullAnchor); |
| 276 | } |
| 277 | |
| 278 | // now grab value (optional) |
| 279 | if (!m_scanner.empty() && m_scanner.peek().type == Token::VALUE) { |
| 280 | m_scanner.pop(); |
| 281 | HandleNode(eventHandler); |
| 282 | } else { |
| 283 | eventHandler.OnNull(token.mark, NullAnchor); |
| 284 | } |
| 285 | } |
| 286 | |
| 287 | m_pCollectionStack->PopCollectionType(CollectionType::BlockMap); |
| 288 | } |
| 289 | |
| 290 | void SingleDocParser::HandleFlowMap(EventHandler& eventHandler) { |
| 291 | // eat start token |
nothing calls this directly
no test coverage detected