MCPcopy Create free account
hub / github.com/boostorg/json / parse_document

Method parse_document

include/boost/json/basic_parser_impl.hpp:527–612  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

525template<class Handler>
526template<bool StackEmpty_>
527const char*
528basic_parser<Handler>::
529parse_document(const char* p,
530 std::integral_constant<bool, StackEmpty_> stack_empty)
531{
532 detail::const_stream_wrapper cs(p, end_);
533 if(! stack_empty && ! st_.empty())
534 {
535 state st;
536 st_.peek(st);
537 switch(st)
538 {
539 default: goto do_doc2;
540 case state::doc1:
541 st_.pop(st);
542 goto do_doc1;
543 case state::doc3:
544 st_.pop(st);
545 goto do_doc3;
546 case state::com1: case state::com2:
547 case state::com3: case state::com4:
548 goto do_doc4;
549 }
550 }
551do_doc1:
552 cs = detail::count_whitespace(cs.begin(), cs.end());
553 if(BOOST_JSON_UNLIKELY(! cs))
554 return maybe_suspend(cs.begin(), state::doc1);
555do_doc2:
556 switch(+opt_.allow_comments |
557 (opt_.allow_trailing_commas << 1) |
558 (opt_.allow_invalid_utf8 << 2))
559 {
560 // no extensions
561 default:
562 cs = parse_value(cs.begin(), stack_empty, std::false_type(), std::false_type(), std::false_type(), opt_.allow_invalid_utf16);
563 break;
564 // comments
565 case 1:
566 cs = parse_value(cs.begin(), stack_empty, std::true_type(), std::false_type(), std::false_type(), opt_.allow_invalid_utf16);
567 break;
568 // trailing
569 case 2:
570 cs = parse_value(cs.begin(), stack_empty, std::false_type(), std::true_type(), std::false_type(), opt_.allow_invalid_utf16);
571 break;
572 // comments & trailing
573 case 3:
574 cs = parse_value(cs.begin(), stack_empty, std::true_type(), std::true_type(), std::false_type(), opt_.allow_invalid_utf16);
575 break;
576 // skip validation
577 case 4:
578 cs = parse_value(cs.begin(), stack_empty, std::false_type(), std::false_type(), std::true_type(), opt_.allow_invalid_utf16);
579 break;
580 // comments & skip validation
581 case 5:
582 cs = parse_value(cs.begin(), stack_empty, std::true_type(), std::false_type(), std::true_type(), opt_.allow_invalid_utf16);
583 break;
584 // trailing & skip validation

Callers

nothing calls this directly

Calls 6

count_whitespaceFunction · 0.85
parse_valueFunction · 0.85
popMethod · 0.80
emptyMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected