_ZnwmPv21boost_container_new_t:
   19|  1.03M|{  return p;  }

_ZN5boost9container3pmr15memory_resource8allocateEmm:
   45|  1.03M|   {  
   46|       |      //Obtain a pointer to enough storage and initialize the lifetime 
   47|       |      //of an array object of the given size in the address
   48|  1.03M|      return ::operator new(bytes, this->do_allocate(bytes, alignment), boost_container_new_t());
   49|  1.03M|   }
_ZN5boost9container3pmr15memory_resource10deallocateEPvmm:
   54|  1.03M|   {  return this->do_deallocate(p, bytes, alignment);  }

_ZNK5boost4core17basic_string_viewIcE4dataEv:
  542|  2.93M|    {
  543|  2.93M|        return p_;
  544|  2.93M|    }
_ZNK5boost4core17basic_string_viewIcE4sizeEv:
  492|  7.03M|    {
  493|  7.03M|        return n_;
  494|  7.03M|    }
_ZN5boost4coreeqENS0_17basic_string_viewIcEES2_:
  964|   923k|    {
  965|   923k|        return sv1.size() == sv2.size() && traits_type::compare( sv1.data(), sv2.data(), sv1.size() ) == 0;
  ------------------
  |  Branch (965:16): [True: 921k, False: 1.74k]
  |  Branch (965:44): [True: 919k, False: 2.37k]
  ------------------
  966|   923k|    }
_ZNK5boost4core17basic_string_viewIcE5beginEv:
  450|   920k|    {
  451|   920k|        return p_;
  452|   920k|    }
_ZNK5boost4core17basic_string_viewIcE3endEv:
  455|   920k|    {
  456|   920k|        return p_ + n_;
  457|   920k|    }
_ZN5boost4coreneENS0_17basic_string_viewIcEES2_:
  969|   919k|    {
  970|   919k|        return !( sv1 == sv2 );
  971|   919k|    }

_ZN5boost4json12basic_parserINS0_6detail7handlerEED2Ev:
  495|  6.85k|    ~basic_parser() = default;
_ZNK5boost4json12basic_parserINS0_6detail7handlerEE4doneEv:
  596|  2.11k|    {
  597|  2.11k|        return done_;
  598|  2.11k|    }
_ZN5boost4json12basic_parserINS0_6detail7handlerEE7handlerEv:
  537|  15.8k|    {
  538|  15.8k|        return h_;
  539|  15.8k|    }

_ZN5boost4json12basic_parserINS0_6detail7handlerEEC2IJNS0_11storage_ptrERPhRmEEERKNS0_13parse_optionsEDpOT_:
 2706|  6.85k|{
 2707|  6.85k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE5resetEv:
 2715|  13.7k|{
 2716|  13.7k|    ec_ = {};
 2717|  13.7k|    st_.clear();
 2718|  13.7k|    more_ = true;
 2719|  13.7k|    done_ = false;
 2720|  13.7k|    clean_ = true;
 2721|  13.7k|    num_buf_.clear();
 2722|  13.7k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE10write_someEbPKcmRNS_6system10error_codeE:
 2752|  6.85k|{
 2753|       |    // see if we exited via exception
 2754|       |    // on the last call to write_some
 2755|  6.85k|    if(! clean_)
  ------------------
  |  Branch (2755:8): [True: 0, False: 6.85k]
  ------------------
 2756|      0|    {
 2757|       |        // prevent UB
 2758|      0|        if(! ec_)
  ------------------
  |  Branch (2758:12): [True: 0, False: 0]
  ------------------
 2759|      0|        {
 2760|      0|            BOOST_JSON_FAIL(ec_, error::exception);
  ------------------
  |  |   20|      0|    BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION; \
  |  |  ------------------
  |  |  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  |  |   21|      0|    (ec).assign(e, &loc);
  ------------------
 2761|      0|        }
 2762|      0|    }
 2763|  6.85k|    if(ec_)
  ------------------
  |  Branch (2763:8): [True: 0, False: 6.85k]
  ------------------
 2764|      0|    {
 2765|       |        // error is sticky
 2766|      0|        ec = ec_;
 2767|      0|        return 0;
 2768|      0|    }
 2769|  6.85k|    clean_ = false;
 2770|  6.85k|    more_ = more;
 2771|  6.85k|    end_ = data + size;
 2772|  6.85k|    const char* p;
 2773|  6.85k|    if(BOOST_JSON_LIKELY(st_.empty()))
  ------------------
  |  |  171|  6.85k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 6.85k, False: 0]
  |  |  ------------------
  ------------------
 2774|  6.85k|    {
 2775|       |        // first time
 2776|  6.85k|        depth_ = opt_.max_depth;
 2777|  6.85k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  6.85k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 6.85k]
  |  |  ------------------
  ------------------
 2778|  6.85k|            ! h_.on_document_begin(ec_)))
 2779|      0|        {
 2780|      0|            ec = ec_;
 2781|      0|            return 0;
 2782|      0|        }
 2783|  6.85k|        p = parse_document(data, std::true_type());
 2784|  6.85k|    }
 2785|      0|    else
 2786|      0|    {
 2787|      0|        p = parse_document(data, std::false_type());
 2788|      0|    }
 2789|       |
 2790|  6.85k|    if(BOOST_JSON_LIKELY(p != sentinel()))
  ------------------
  |  |  171|  6.85k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 2.60k, False: 4.24k]
  |  |  ------------------
  ------------------
 2791|  2.60k|    {
 2792|  2.60k|        BOOST_ASSERT(! ec_);
  ------------------
  |  |   60|  2.60k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2793|  2.60k|        if(! done_)
  ------------------
  |  Branch (2793:12): [True: 2.60k, False: 0]
  ------------------
 2794|  2.60k|        {
 2795|  2.60k|            done_ = true;
 2796|  2.60k|            h_.on_document_end(ec_);
 2797|  2.60k|        }
 2798|  2.60k|    }
 2799|  4.24k|    else
 2800|  4.24k|    {
 2801|  4.24k|        if(! ec_)
  ------------------
  |  Branch (2801:12): [True: 1.91k, False: 2.33k]
  ------------------
 2802|  1.91k|        {
 2803|  1.91k|            if(! more_)
  ------------------
  |  Branch (2803:16): [True: 1.91k, False: 0]
  ------------------
 2804|  1.91k|            {
 2805|  1.91k|                BOOST_JSON_FAIL(ec_, error::incomplete);
  ------------------
  |  |   20|  1.91k|    BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION; \
  |  |  ------------------
  |  |  |  |  170|  1.91k|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  |  |   21|  1.91k|    (ec).assign(e, &loc);
  ------------------
 2806|  1.91k|            }
 2807|      0|            else if(! st_.empty())
  ------------------
  |  Branch (2807:21): [True: 0, False: 0]
  ------------------
 2808|      0|            {
 2809|       |                // consume as much trailing whitespace in
 2810|       |                // the JSON document as possible, but still
 2811|       |                // consider the parse complete
 2812|      0|                state st;
 2813|      0|                st_.peek(st);
 2814|      0|                if( st == state::doc3 &&
  ------------------
  |  Branch (2814:21): [True: 0, False: 0]
  ------------------
 2815|      0|                    ! done_)
  ------------------
  |  Branch (2815:21): [True: 0, False: 0]
  ------------------
 2816|      0|                {
 2817|      0|                    done_ = true;
 2818|      0|                    h_.on_document_end(ec_);
 2819|      0|                }
 2820|      0|            }
 2821|  1.91k|        }
 2822|  4.24k|        p = end_;
 2823|  4.24k|    }
 2824|  6.85k|    ec = ec_;
 2825|  6.85k|    clean_ = true;
 2826|  6.85k|    return p - data;
 2827|  6.85k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE14parse_documentILb1EEEPKcS7_NSt3__117integral_constantIbXT_EEE:
  508|  6.85k|{
  509|  6.85k|    detail::const_stream_wrapper cs(p, end_);
  510|  6.85k|    if(! stack_empty && ! st_.empty())
  ------------------
  |  Branch (510:8): [Folded - Ignored]
  |  Branch (510:25): [True: 0, False: 0]
  ------------------
  511|      0|    {
  512|      0|        state st;
  513|      0|        st_.peek(st);
  514|      0|        switch(st)
  515|      0|        {
  516|      0|        default: goto do_doc2;
  ------------------
  |  Branch (516:9): [True: 0, False: 0]
  ------------------
  517|      0|        case state::doc1:
  ------------------
  |  Branch (517:9): [True: 0, False: 0]
  ------------------
  518|      0|                 st_.pop(st);
  519|      0|                 goto do_doc1;
  520|      0|        case state::doc3:
  ------------------
  |  Branch (520:9): [True: 0, False: 0]
  ------------------
  521|      0|                 st_.pop(st);
  522|      0|                 goto do_doc3;
  523|      0|        case state::com1: case state::com2:
  ------------------
  |  Branch (523:9): [True: 0, False: 0]
  |  Branch (523:27): [True: 0, False: 0]
  ------------------
  524|      0|        case state::com3: case state::com4:
  ------------------
  |  Branch (524:9): [True: 0, False: 0]
  |  Branch (524:27): [True: 0, False: 0]
  ------------------
  525|      0|                 goto do_doc4;
  526|      0|        }
  527|      0|    }
  528|  6.85k|do_doc1:
  529|  6.85k|    cs = detail::count_whitespace(cs.begin(), cs.end());
  530|  6.85k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  6.85k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 24, False: 6.83k]
  |  |  ------------------
  ------------------
  531|     24|        return maybe_suspend(cs.begin(), state::doc1);
  532|  6.83k|do_doc2:
  533|  6.83k|    switch(+opt_.allow_comments |
  534|  6.83k|        (opt_.allow_trailing_commas << 1) |
  535|  6.83k|        (opt_.allow_invalid_utf8 << 2))
  536|  6.83k|    {
  537|       |    // no extensions
  538|  6.83k|    default:
  ------------------
  |  Branch (538:5): [True: 6.83k, False: 0]
  ------------------
  539|  6.83k|        cs = parse_value(cs.begin(), stack_empty, std::false_type(), std::false_type(), std::false_type());
  540|  6.83k|        break;
  541|       |    // comments
  542|      0|    case 1:
  ------------------
  |  Branch (542:5): [True: 0, False: 6.83k]
  ------------------
  543|      0|        cs = parse_value(cs.begin(), stack_empty, std::true_type(), std::false_type(), std::false_type());
  544|      0|        break;
  545|       |    // trailing
  546|      0|    case 2:
  ------------------
  |  Branch (546:5): [True: 0, False: 6.83k]
  ------------------
  547|      0|        cs = parse_value(cs.begin(), stack_empty, std::false_type(), std::true_type(), std::false_type());
  548|      0|        break;
  549|       |    // comments & trailing
  550|      0|    case 3:
  ------------------
  |  Branch (550:5): [True: 0, False: 6.83k]
  ------------------
  551|      0|        cs = parse_value(cs.begin(), stack_empty, std::true_type(), std::true_type(), std::false_type());
  552|      0|        break;
  553|       |    // skip validation
  554|      0|    case 4:
  ------------------
  |  Branch (554:5): [True: 0, False: 6.83k]
  ------------------
  555|      0|        cs = parse_value(cs.begin(), stack_empty, std::false_type(), std::false_type(), std::true_type());
  556|      0|        break;
  557|       |    // comments & skip validation
  558|      0|    case 5:
  ------------------
  |  Branch (558:5): [True: 0, False: 6.83k]
  ------------------
  559|      0|        cs = parse_value(cs.begin(), stack_empty, std::true_type(), std::false_type(), std::true_type());
  560|      0|        break;
  561|       |    // trailing & skip validation
  562|      0|    case 6:
  ------------------
  |  Branch (562:5): [True: 0, False: 6.83k]
  ------------------
  563|      0|        cs = parse_value(cs.begin(), stack_empty, std::false_type(), std::true_type(), std::true_type());
  564|      0|        break;
  565|       |    // comments & trailing & skip validation
  566|      0|    case 7:
  ------------------
  |  Branch (566:5): [True: 0, False: 6.83k]
  ------------------
  567|      0|        cs = parse_value(cs.begin(), stack_empty, std::true_type(), std::true_type(), std::true_type());
  568|      0|        break;
  569|  6.83k|    }
  570|  6.83k|    if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|  6.83k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 4.22k, False: 2.60k]
  |  |  ------------------
  ------------------
  571|       |        // the appropriate state has already been pushed into stack
  572|  4.22k|        return sentinel();
  573|  2.60k|do_doc3:
  574|  2.60k|    cs = detail::count_whitespace(cs.begin(), cs.end());
  575|  2.60k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.60k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 2.11k, False: 489]
  |  |  ------------------
  ------------------
  576|  2.11k|    {
  577|  2.11k|        if(more_)
  ------------------
  |  Branch (577:12): [True: 0, False: 2.11k]
  ------------------
  578|      0|            return suspend(cs.begin(), state::doc3);
  579|  2.11k|    }
  580|    489|    else if(opt_.allow_comments && *cs == '/')
  ------------------
  |  Branch (580:13): [True: 0, False: 489]
  |  Branch (580:36): [True: 0, False: 0]
  ------------------
  581|      0|    {
  582|      0|do_doc4:
  583|      0|        cs = parse_comment(cs.begin(), stack_empty, std::true_type());
  584|      0|        if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  585|      0|            return sentinel();
  586|      0|        goto do_doc3;
  587|      0|    }
  588|  2.60k|    return cs.begin();
  589|  2.60k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE13maybe_suspendEPKcNS4_5stateE:
  316|     53|{
  317|     53|    end_ = p;
  318|     53|    if(BOOST_JSON_LIKELY(more_))
  ------------------
  |  |  171|     53|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 53]
  |  |  ------------------
  ------------------
  319|      0|    {
  320|       |        // suspend
  321|      0|        reserve();
  322|      0|        st_.push_unchecked(st);
  323|      0|    }
  324|     53|    return sentinel();
  325|     53|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE11parse_valueILb1ELb0EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IbXT0_EEEbb:
  604|  3.10M|{
  605|  3.10M|    if(stack_empty || st_.empty())
  ------------------
  |  Branch (605:8): [Folded - Ignored]
  |  Branch (605:23): [True: 0, False: 0]
  ------------------
  606|  3.10M|    {
  607|  3.10M|loop:
  608|  3.10M|        switch(*p)
  609|  3.10M|        {
  610|   505k|        case '0':
  ------------------
  |  Branch (610:9): [True: 505k, False: 2.60M]
  ------------------
  611|   505k|            return parse_number(p, std::true_type(), std::integral_constant<char, '0'>());
  612|  14.2k|        case '-':
  ------------------
  |  Branch (612:9): [True: 14.2k, False: 3.09M]
  ------------------
  613|  14.2k|            return parse_number(p, std::true_type(), std::integral_constant<char, '-'>());
  614|   255k|        case '1': case '2': case '3':
  ------------------
  |  Branch (614:9): [True: 165k, False: 2.94M]
  |  Branch (614:19): [True: 51.9k, False: 3.05M]
  |  Branch (614:29): [True: 37.7k, False: 3.07M]
  ------------------
  615|   747k|        case '4': case '5': case '6':
  ------------------
  |  Branch (615:9): [True: 103k, False: 3.00M]
  |  Branch (615:19): [True: 39.5k, False: 3.06M]
  |  Branch (615:29): [True: 348k, False: 2.75M]
  ------------------
  616|  2.52M|        case '7': case '8': case '9':
  ------------------
  |  Branch (616:9): [True: 823k, False: 2.28M]
  |  Branch (616:19): [True: 899k, False: 2.20M]
  |  Branch (616:29): [True: 57.0k, False: 3.05M]
  ------------------
  617|  2.52M|            return parse_number(p, std::true_type(), std::integral_constant<char, '+'>());
  618|  3.55k|        case 'n':
  ------------------
  |  Branch (618:9): [True: 3.55k, False: 3.10M]
  ------------------
  619|  3.55k|            return parse_literal( p, mp11::mp_int<detail::null_literal>() );
  620|  4.42k|        case 't':
  ------------------
  |  Branch (620:9): [True: 4.42k, False: 3.10M]
  ------------------
  621|  4.42k|            return parse_literal( p, mp11::mp_int<detail::true_literal>() );
  622|    367|        case 'f':
  ------------------
  |  Branch (622:9): [True: 367, False: 3.10M]
  ------------------
  623|    367|            return parse_literal( p, mp11::mp_int<detail::false_literal>() );
  624|      2|        case 'I':
  ------------------
  |  Branch (624:9): [True: 2, False: 3.10M]
  ------------------
  625|      2|            if( !opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (625:17): [True: 2, False: 0]
  ------------------
  626|      2|            {
  627|      2|                BOOST_STATIC_CONSTEXPR source_location loc
  628|      2|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      2|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  629|      2|                return fail(p, error::syntax, &loc);
  630|      2|            }
  631|      0|            return parse_literal( p, mp11::mp_int<detail::infinity_literal>() );
  632|      2|        case 'N':
  ------------------
  |  Branch (632:9): [True: 2, False: 3.10M]
  ------------------
  633|      2|            if( !opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (633:17): [True: 2, False: 0]
  ------------------
  634|      2|            {
  635|      2|                BOOST_STATIC_CONSTEXPR source_location loc
  636|      2|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      2|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  637|      2|                return fail(p, error::syntax, &loc);
  638|      2|            }
  639|      0|            return parse_literal( p, mp11::mp_int<detail::nan_literal>() );
  640|  32.2k|        case '"':
  ------------------
  |  Branch (640:9): [True: 32.2k, False: 3.07M]
  ------------------
  641|  32.2k|            return parse_unescaped(p, std::true_type(), std::false_type(), allow_bad_utf8);
  642|  4.36k|        case '[':
  ------------------
  |  Branch (642:9): [True: 4.36k, False: 3.10M]
  ------------------
  643|  4.36k|            return parse_array(p, std::true_type(), allow_comments, allow_trailing, allow_bad_utf8);
  644|  16.1k|        case '{':
  ------------------
  |  Branch (644:9): [True: 16.1k, False: 3.09M]
  ------------------
  645|  16.1k|            return parse_object(p, std::true_type(), allow_comments, allow_trailing, allow_bad_utf8);
  646|      1|        case '/':
  ------------------
  |  Branch (646:9): [True: 1, False: 3.10M]
  ------------------
  647|      1|            if(! allow_comments)
  ------------------
  |  Branch (647:16): [Folded - Ignored]
  ------------------
  648|      1|            {
  649|      1|                BOOST_STATIC_CONSTEXPR source_location loc
  650|      1|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      1|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  651|      1|                return fail(p, error::syntax, &loc);
  652|      1|            }
  653|      0|            p = parse_comment(p, stack_empty, std::false_type());
  654|       |            // KRYSTIAN NOTE: incomplete takes const_stream, we either
  655|       |            // can add an overload, change the existing one to take a pointer,
  656|       |            // or just leave it as is
  657|      0|            if(BOOST_JSON_UNLIKELY(p == sentinel()))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  658|      0|                return maybe_suspend(p, state::val2);
  659|       |            // intentional fallthrough
  660|      0|        case ' ':
  ------------------
  |  Branch (660:9): [True: 0, False: 3.10M]
  ------------------
  661|      0|        case '\t':
  ------------------
  |  Branch (661:9): [True: 0, False: 3.10M]
  ------------------
  662|      0|        case '\n':
  ------------------
  |  Branch (662:9): [True: 0, False: 3.10M]
  ------------------
  663|      0|        case '\r':
  ------------------
  |  Branch (663:9): [True: 0, False: 3.10M]
  ------------------
  664|      0|            p = detail::count_whitespace(p, end_);
  665|      0|            if(BOOST_JSON_UNLIKELY(p == end_))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  666|      0|                return maybe_suspend(p, state::val1);
  667|      0|            goto loop;
  668|    278|        default:
  ------------------
  |  Branch (668:9): [True: 278, False: 3.10M]
  ------------------
  669|    278|            {
  670|    278|                BOOST_STATIC_CONSTEXPR source_location loc
  671|    278|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|    278|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  672|    278|                return fail(p, error::syntax, &loc);
  673|      0|            }
  674|  3.10M|        }
  675|  3.10M|    }
  676|      0|    return resume_value(p, allow_comments, allow_trailing, allow_bad_utf8);
  677|  3.10M|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE12parse_numberILb1ELc48EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IcXT0_EEE:
 1971|   505k|{
 1972|       |    // only one of these will be true if we are not resuming
 1973|       |    // if negative then !zero_first && !nonzero_first
 1974|       |    // if zero_first then !nonzero_first && !negative
 1975|       |    // if nonzero_first then !zero_first && !negative
 1976|   505k|    bool const negative = first == '-';
 1977|   505k|    bool const zero_first = first == '0';
 1978|   505k|    bool const nonzero_first = first == '+';
 1979|   505k|    bool const precise_parsing = opt_.precise_parsing;
 1980|   505k|    detail::const_stream_wrapper cs(p, end_);
 1981|   505k|    number num;
 1982|   505k|    const char* begin = cs.begin();
 1983|   505k|    if(stack_empty || st_.empty())
  ------------------
  |  Branch (1983:8): [Folded - Ignored]
  |  Branch (1983:23): [True: 0, False: 0]
  ------------------
 1984|   505k|    {
 1985|   505k|        num.bias = 0;
 1986|   505k|        num.exp = 0;
 1987|   505k|        num.frac = false;
 1988|   505k|        num_buf_.clear();
 1989|       |
 1990|       |        //----------------------------------
 1991|       |        //
 1992|       |        // '-'
 1993|       |        // leading minus sign
 1994|       |        //
 1995|   505k|        BOOST_ASSERT(cs);
  ------------------
  |  |   60|   505k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1996|   505k|        if(negative)
  ------------------
  |  Branch (1996:12): [Folded - Ignored]
  ------------------
 1997|      0|            ++cs;
 1998|       |
 1999|   505k|        num.neg = negative;
 2000|   505k|        num.frac = false;
 2001|   505k|        num.exp = 0;
 2002|   505k|        num.bias = 0;
 2003|       |
 2004|       |        // fast path
 2005|   505k|        if( cs.remain() >= 16 + 1 + 16 ) // digits . digits
  ------------------
  |  Branch (2005:13): [True: 503k, False: 1.68k]
  ------------------
 2006|   503k|        {
 2007|   503k|            int n1;
 2008|       |
 2009|   503k|            if( nonzero_first ||
  ------------------
  |  Branch (2009:17): [Folded - Ignored]
  ------------------
 2010|   503k|                (negative && *cs != '0') )
  ------------------
  |  Branch (2010:18): [Folded - Ignored]
  |  Branch (2010:30): [True: 0, False: 0]
  ------------------
 2011|      0|            {
 2012|      0|                n1 = detail::count_digits( cs.begin() );
 2013|      0|                BOOST_ASSERT(n1 >= 0 && n1 <= 16);
  ------------------
  |  |   60|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2014|       |
 2015|      0|                if( negative && n1 == 0 && opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (2015:21): [Folded - Ignored]
  |  Branch (2015:33): [True: 0, False: 0]
  |  Branch (2015:44): [True: 0, False: 0]
  ------------------
 2016|      0|                {
 2017|      0|                    return parse_literal(
 2018|      0|                        p - 1, mp11::mp_int<detail::neg_infinity_literal>());
 2019|      0|                }
 2020|       |
 2021|      0|                if( ! nonzero_first && n1 == 0 )
  ------------------
  |  Branch (2021:21): [Folded - Ignored]
  |  Branch (2021:40): [True: 0, False: 0]
  ------------------
 2022|      0|                {
 2023|       |                    // digit required
 2024|      0|                    BOOST_STATIC_CONSTEXPR source_location loc
 2025|      0|                        = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2026|      0|                    return fail(cs.begin(), error::syntax, &loc);
 2027|      0|                }
 2028|       |
 2029|      0|                num.mant = detail::parse_unsigned( 0, cs.begin(), n1 );
 2030|       |
 2031|      0|                cs += n1;
 2032|       |
 2033|       |                // integer or floating-point with
 2034|       |                // >= 16 leading digits
 2035|      0|                if( n1 == 16 )
  ------------------
  |  Branch (2035:21): [True: 0, False: 0]
  ------------------
 2036|      0|                {
 2037|      0|                    goto do_num2;
 2038|      0|                }
 2039|      0|            }
 2040|   503k|            else
 2041|   503k|            {
 2042|       |                // 0. floating-point or 0e integer
 2043|   503k|                num.mant = 0;
 2044|   503k|                n1 = 0;
 2045|   503k|                ++cs;
 2046|   503k|            }
 2047|       |
 2048|   503k|            {
 2049|   503k|                const char c = *cs;
 2050|   503k|                if(c != '.')
  ------------------
  |  Branch (2050:20): [True: 499k, False: 4.60k]
  ------------------
 2051|   499k|                {
 2052|   499k|                    if((c | 32) == 'e')
  ------------------
  |  Branch (2052:24): [True: 1.99k, False: 497k]
  ------------------
 2053|  1.99k|                    {
 2054|  1.99k|                        ++cs;
 2055|  1.99k|                        goto do_exp1;
 2056|  1.99k|                    }
 2057|   497k|                    if(negative)
  ------------------
  |  Branch (2057:24): [Folded - Ignored]
  ------------------
 2058|      0|                        num.mant = ~num.mant + 1;
 2059|   497k|                    goto finish_signed;
 2060|   499k|                }
 2061|   503k|            }
 2062|       |
 2063|       |            // floating-point number
 2064|       |
 2065|  4.60k|            ++cs;
 2066|       |
 2067|  4.60k|            int n2 = detail::count_digits( cs.begin() );
 2068|  4.60k|            BOOST_ASSERT(n2 >= 0 && n2 <= 16);
  ------------------
  |  |   60|  4.60k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2069|       |
 2070|  4.60k|            if( n2 == 0 )
  ------------------
  |  Branch (2070:17): [True: 2, False: 4.60k]
  ------------------
 2071|      2|            {
 2072|       |                // digit required
 2073|      2|                BOOST_STATIC_CONSTEXPR source_location loc
 2074|      2|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      2|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2075|      2|                return fail(cs.begin(), error::syntax, &loc);
 2076|      2|            }
 2077|       |
 2078|       |            // floating-point mantissa overflow
 2079|  4.60k|            if( n1 + n2 >= 19 )
  ------------------
  |  Branch (2079:17): [True: 0, False: 4.60k]
  ------------------
 2080|      0|            {
 2081|      0|                goto do_num7;
 2082|      0|            }
 2083|       |
 2084|  4.60k|            num.mant = detail::parse_unsigned( num.mant, cs.begin(), n2 );
 2085|       |
 2086|  4.60k|            BOOST_ASSERT(num.bias == 0);
  ------------------
  |  |   60|  4.60k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2087|       |
 2088|  4.60k|            num.bias -= n2;
 2089|       |
 2090|  4.60k|            cs += n2;
 2091|       |
 2092|  4.60k|            char ch = *cs;
 2093|       |
 2094|  4.60k|            if( (ch | 32) == 'e' )
  ------------------
  |  Branch (2094:17): [True: 300, False: 4.30k]
  ------------------
 2095|    300|            {
 2096|    300|                ++cs;
 2097|    300|                goto do_exp1;
 2098|    300|            }
 2099|  4.30k|            else if( ch >= '0' && ch <= '9' )
  ------------------
  |  Branch (2099:22): [True: 1.62k, False: 2.67k]
  |  Branch (2099:35): [True: 1.42k, False: 204]
  ------------------
 2100|  1.42k|            {
 2101|  1.42k|                goto do_num8;
 2102|  1.42k|            }
 2103|       |
 2104|  2.87k|            goto finish_dub;
 2105|  4.60k|        }
 2106|   505k|    }
 2107|      0|    else
 2108|      0|    {
 2109|      0|        num = num_;
 2110|      0|        state st;
 2111|      0|        st_.pop(st);
 2112|      0|        switch(st)
 2113|      0|        {
 2114|      0|        default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (2114:9): [True: 0, False: 0]
  ------------------
 2115|      0|        case state::num1: goto do_num1;
  ------------------
  |  Branch (2115:9): [True: 0, False: 0]
  ------------------
 2116|      0|        case state::num2: goto do_num2;
  ------------------
  |  Branch (2116:9): [True: 0, False: 0]
  ------------------
 2117|      0|        case state::num3: goto do_num3;
  ------------------
  |  Branch (2117:9): [True: 0, False: 0]
  ------------------
 2118|      0|        case state::num4: goto do_num4;
  ------------------
  |  Branch (2118:9): [True: 0, False: 0]
  ------------------
 2119|      0|        case state::num5: goto do_num5;
  ------------------
  |  Branch (2119:9): [True: 0, False: 0]
  ------------------
 2120|      0|        case state::num6: goto do_num6;
  ------------------
  |  Branch (2120:9): [True: 0, False: 0]
  ------------------
 2121|      0|        case state::num7: goto do_num7;
  ------------------
  |  Branch (2121:9): [True: 0, False: 0]
  ------------------
 2122|      0|        case state::num8: goto do_num8;
  ------------------
  |  Branch (2122:9): [True: 0, False: 0]
  ------------------
 2123|      0|        case state::exp1: goto do_exp1;
  ------------------
  |  Branch (2123:9): [True: 0, False: 0]
  ------------------
 2124|      0|        case state::exp2: goto do_exp2;
  ------------------
  |  Branch (2124:9): [True: 0, False: 0]
  ------------------
 2125|      0|        case state::exp3: goto do_exp3;
  ------------------
  |  Branch (2125:9): [True: 0, False: 0]
  ------------------
 2126|      0|        }
 2127|      0|    }
 2128|       |
 2129|       |    //----------------------------------
 2130|       |    //
 2131|       |    // DIGIT
 2132|       |    // first digit
 2133|       |    //
 2134|  1.68k|do_num1:
 2135|  1.68k|    if(zero_first || nonzero_first ||
  ------------------
  |  Branch (2135:8): [Folded - Ignored]
  |  Branch (2135:22): [Folded - Ignored]
  ------------------
 2136|  1.68k|        BOOST_JSON_LIKELY(cs))
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2137|  1.68k|    {
 2138|  1.68k|        char const c = *cs;
 2139|  1.68k|        if(zero_first)
  ------------------
  |  Branch (2139:12): [Folded - Ignored]
  ------------------
 2140|  1.68k|        {
 2141|  1.68k|            ++cs;
 2142|  1.68k|            num.mant = 0;
 2143|  1.68k|            goto do_num6;
 2144|  1.68k|        }
 2145|      0|        else if(nonzero_first || BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2145:17): [Folded - Ignored]
  ------------------
 2146|      0|            c >= '1' && c <= '9'))
 2147|      0|        {
 2148|      0|            ++cs;
 2149|      0|            num.mant = c - '0';
 2150|      0|        }
 2151|      0|        else if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2152|      0|            c == '0'))
 2153|      0|        {
 2154|      0|            ++cs;
 2155|      0|            num.mant = 0;
 2156|      0|            goto do_num6;
 2157|      0|        }
 2158|      0|        else if( (negative || num.neg) && opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (2158:19): [Folded - Ignored]
  |  Branch (2158:31): [True: 0, False: 0]
  |  Branch (2158:43): [True: 0, False: 0]
  ------------------
 2159|      0|        {
 2160|      0|            st_.push(state::lit1);
 2161|      0|            cur_lit_ = detail::neg_infinity_literal;
 2162|      0|            lit_offset_ = 1;
 2163|      0|            return parse_literal(
 2164|      0|                cs.begin(), mp11::mp_int<detail::resume_literal>() );
 2165|      0|        }
 2166|      0|        else
 2167|      0|        {
 2168|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 2169|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2170|      0|            return fail(cs.begin(), error::syntax, &loc);
 2171|      0|        }
 2172|  1.68k|    }
 2173|      0|    else
 2174|      0|    {
 2175|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2176|      0|            ! h_.on_number_part(
 2177|      0|                {begin, cs.used(begin)}, ec_)))
 2178|      0|            return fail(cs.begin());
 2179|       |
 2180|      0|        if( precise_parsing )
  ------------------
  |  Branch (2180:13): [True: 0, False: 0]
  ------------------
 2181|      0|            num_buf_.append( begin, cs.used(begin) );
 2182|      0|        return maybe_suspend(
 2183|      0|            cs.begin(), state::num1, num);
 2184|      0|    }
 2185|       |
 2186|       |    //----------------------------------
 2187|       |    //
 2188|       |    // 1*DIGIT
 2189|       |    // significant digits left of decimal
 2190|       |    //
 2191|      0|do_num2:
 2192|      0|    if(negative || (!stack_empty && num.neg))
  ------------------
  |  Branch (2192:8): [Folded - Ignored]
  |  Branch (2192:21): [Folded - Ignored]
  |  Branch (2192:37): [True: 0, False: 0]
  ------------------
 2193|      0|    {
 2194|      0|        for(;;)
 2195|      0|        {
 2196|      0|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2197|      0|            {
 2198|      0|                if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2199|      0|                {
 2200|      0|                    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2201|      0|                        ! h_.on_number_part(
 2202|      0|                            {begin, cs.used(begin)}, ec_)))
 2203|      0|                        return fail(cs.begin());
 2204|       |
 2205|      0|                    if( precise_parsing )
  ------------------
  |  Branch (2205:25): [True: 0, False: 0]
  ------------------
 2206|      0|                        num_buf_.append( begin, cs.used(begin) );
 2207|      0|                    return suspend(cs.begin(), state::num2, num);
 2208|      0|                }
 2209|      0|                goto finish_int;
 2210|      0|            }
 2211|      0|            char const c = *cs;
 2212|      0|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2213|      0|                c >= '0' && c <= '9'))
 2214|      0|            {
 2215|      0|                ++cs;
 2216|       |                //              9223372036854775808 INT64_MIN
 2217|      0|                if( num.mant  > 922337203685477580 || (
  ------------------
  |  Branch (2217:21): [True: 0, False: 0]
  ------------------
 2218|      0|                    num.mant == 922337203685477580 && c > '8'))
  ------------------
  |  Branch (2218:21): [True: 0, False: 0]
  |  Branch (2218:55): [True: 0, False: 0]
  ------------------
 2219|      0|                    break;
 2220|      0|                num.mant = 10 * num.mant + ( c - '0' );
 2221|      0|                continue;
 2222|      0|            }
 2223|      0|            goto do_num6; // [.eE]
 2224|      0|        }
 2225|      0|    }
 2226|      0|    else
 2227|      0|    {
 2228|      0|        for(;;)
 2229|      0|        {
 2230|      0|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2231|      0|            {
 2232|      0|                if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2233|      0|                {
 2234|      0|                    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2235|      0|                        ! h_.on_number_part(
 2236|      0|                            {begin, cs.used(begin)}, ec_)))
 2237|      0|                        return fail(cs.begin());
 2238|       |
 2239|      0|                    if( precise_parsing )
  ------------------
  |  Branch (2239:25): [True: 0, False: 0]
  ------------------
 2240|      0|                        num_buf_.append( begin, cs.used(begin) );
 2241|      0|                    return suspend(cs.begin(), state::num2, num);
 2242|      0|                }
 2243|      0|                goto finish_int;
 2244|      0|            }
 2245|      0|            char const c = *cs;
 2246|      0|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2247|      0|                c >= '0' && c <= '9'))
 2248|      0|            {
 2249|      0|                ++cs;
 2250|       |                //              18446744073709551615 UINT64_MAX
 2251|      0|                if( num.mant  > 1844674407370955161 || (
  ------------------
  |  Branch (2251:21): [True: 0, False: 0]
  ------------------
 2252|      0|                    num.mant == 1844674407370955161 && c > '5'))
  ------------------
  |  Branch (2252:21): [True: 0, False: 0]
  |  Branch (2252:56): [True: 0, False: 0]
  ------------------
 2253|      0|                    break;
 2254|      0|                num.mant = 10 * num.mant + ( c - '0' );
 2255|      0|            }
 2256|      0|            else
 2257|      0|            {
 2258|      0|                goto do_num6; // [.eE]
 2259|      0|            }
 2260|      0|        }
 2261|      0|    }
 2262|      0|    ++num.bias;
 2263|       |
 2264|       |    //----------------------------------
 2265|       |    //
 2266|       |    // 1*DIGIT
 2267|       |    // non-significant digits left of decimal
 2268|       |    //
 2269|      0|do_num3:
 2270|      0|    for(;;)
 2271|      0|    {
 2272|      0|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2273|      0|        {
 2274|      0|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2275|      0|            {
 2276|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2277|      0|                    ! h_.on_number_part(
 2278|      0|                        {begin, cs.used(begin)}, ec_)))
 2279|      0|                    return fail(cs.begin());
 2280|       |
 2281|      0|                if( precise_parsing )
  ------------------
  |  Branch (2281:21): [True: 0, False: 0]
  ------------------
 2282|      0|                    num_buf_.append( begin, cs.used(begin) );
 2283|      0|                return suspend(cs.begin(), state::num3, num);
 2284|      0|            }
 2285|      0|            goto finish_dub;
 2286|      0|        }
 2287|      0|        char const c = *cs;
 2288|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2289|      0|            c >= '0' && c <= '9'))
 2290|      0|        {
 2291|      0|            ++cs;
 2292|       |            // VFALCO check overflow
 2293|      0|            ++num.bias;
 2294|      0|        }
 2295|      0|        else if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2296|      0|            c == '.'))
 2297|      0|        {
 2298|      0|            ++cs;
 2299|      0|            break;
 2300|      0|        }
 2301|      0|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2301:17): [True: 0, False: 0]
  ------------------
 2302|      0|        {
 2303|      0|            ++cs;
 2304|      0|            goto do_exp1;
 2305|      0|        }
 2306|      0|        else
 2307|      0|        {
 2308|      0|            goto finish_dub;
 2309|      0|        }
 2310|      0|    }
 2311|       |
 2312|       |    //----------------------------------
 2313|       |    //
 2314|       |    // DIGIT
 2315|       |    // first non-significant digit
 2316|       |    // to the right of decimal
 2317|       |    //
 2318|      0|do_num4:
 2319|      0|    {
 2320|      0|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2321|      0|        {
 2322|      0|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2323|      0|                ! h_.on_number_part(
 2324|      0|                    {begin, cs.used(begin)}, ec_)))
 2325|      0|                return fail(cs.begin());
 2326|       |
 2327|      0|            if( precise_parsing )
  ------------------
  |  Branch (2327:17): [True: 0, False: 0]
  ------------------
 2328|      0|                num_buf_.append( begin, cs.used(begin) );
 2329|      0|            return maybe_suspend(
 2330|      0|                cs.begin(), state::num4, num);
 2331|      0|        }
 2332|      0|        char const c = *cs;
 2333|      0|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2334|       |            //static_cast<unsigned char>(c - '0') < 10))
 2335|      0|            c >= '0' && c <= '9'))
 2336|      0|        {
 2337|      0|            ++cs;
 2338|      0|        }
 2339|      0|        else
 2340|      0|        {
 2341|       |            // digit required
 2342|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 2343|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2344|      0|            return fail(cs.begin(), error::syntax, &loc);
 2345|      0|        }
 2346|      0|    }
 2347|       |
 2348|       |    //----------------------------------
 2349|       |    //
 2350|       |    // 1*DIGIT
 2351|       |    // non-significant digits
 2352|       |    // to the right of decimal
 2353|       |    //
 2354|    951|do_num5:
 2355|    951|    for(;;)
 2356|  4.08k|    {
 2357|  4.08k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  4.08k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 15, False: 4.07k]
  |  |  ------------------
  ------------------
 2358|     15|        {
 2359|     15|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     15|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 15]
  |  |  ------------------
  ------------------
 2360|      0|            {
 2361|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2362|      0|                    ! h_.on_number_part(
 2363|      0|                        {begin, cs.used(begin)}, ec_)))
 2364|      0|                    return fail(cs.begin());
 2365|       |
 2366|      0|                if( precise_parsing )
  ------------------
  |  Branch (2366:21): [True: 0, False: 0]
  ------------------
 2367|      0|                    num_buf_.append( begin, cs.used(begin) );
 2368|      0|                return suspend(cs.begin(), state::num5, num);
 2369|      0|            }
 2370|     15|            goto finish_dub;
 2371|     15|        }
 2372|  4.07k|        char const c = *cs;
 2373|  4.07k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  7.42k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 3.13k, False: 936]
  |  |  |  Branch (171:52): [True: 3.35k, False: 717]
  |  |  |  Branch (171:52): [True: 3.13k, False: 219]
  |  |  ------------------
  ------------------
 2374|  4.07k|            c >= '0' && c <= '9'))
 2375|  3.13k|        {
 2376|  3.13k|            ++cs;
 2377|  3.13k|        }
 2378|    936|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2378:17): [True: 210, False: 726]
  ------------------
 2379|    210|        {
 2380|    210|            ++cs;
 2381|    210|            goto do_exp1;
 2382|    210|        }
 2383|    726|        else
 2384|    726|        {
 2385|    726|            goto finish_dub;
 2386|    726|        }
 2387|  4.07k|    }
 2388|       |
 2389|       |    //----------------------------------
 2390|       |    //
 2391|       |    // [.eE]
 2392|       |    //
 2393|  1.68k|do_num6:
 2394|  1.68k|    {
 2395|  1.68k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.68k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 21, False: 1.66k]
  |  |  ------------------
  ------------------
 2396|     21|        {
 2397|     21|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     21|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 21]
  |  |  ------------------
  ------------------
 2398|      0|            {
 2399|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2400|      0|                    ! h_.on_number_part(
 2401|      0|                        {begin, cs.used(begin)}, ec_)))
 2402|      0|                    return fail(cs.begin());
 2403|       |
 2404|      0|                if( precise_parsing )
  ------------------
  |  Branch (2404:21): [True: 0, False: 0]
  ------------------
 2405|      0|                    num_buf_.append( begin, cs.used(begin) );
 2406|      0|                return suspend(cs.begin(), state::num6, num);
 2407|      0|            }
 2408|     21|            goto finish_int;
 2409|     21|        }
 2410|  1.66k|        char const c = *cs;
 2411|  1.66k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  1.66k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 353, False: 1.31k]
  |  |  ------------------
  ------------------
 2412|  1.66k|            c == '.'))
 2413|    353|        {
 2414|    353|            ++cs;
 2415|    353|        }
 2416|  1.31k|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2416:17): [True: 560, False: 755]
  ------------------
 2417|    560|        {
 2418|    560|            ++cs;
 2419|    560|            goto do_exp1;
 2420|    560|        }
 2421|    755|        else
 2422|    755|        {
 2423|    755|            goto finish_int;
 2424|    755|        }
 2425|  1.66k|    }
 2426|       |
 2427|       |    //----------------------------------
 2428|       |    //
 2429|       |    // DIGIT
 2430|       |    // first significant digit
 2431|       |    // to the right of decimal
 2432|       |    //
 2433|    353|do_num7:
 2434|    353|    {
 2435|    353|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|    353|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 5, False: 348]
  |  |  ------------------
  ------------------
 2436|      5|        {
 2437|      5|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      5|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 2438|      0|            {
 2439|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2440|      0|                    ! h_.on_number_part(
 2441|      0|                        {begin, cs.used(begin)}, ec_)))
 2442|      0|                    return fail(cs.begin());
 2443|       |
 2444|      0|                if( precise_parsing )
  ------------------
  |  Branch (2444:21): [True: 0, False: 0]
  ------------------
 2445|      0|                    num_buf_.append( begin, cs.used(begin) );
 2446|      0|                return suspend(cs.begin(), state::num7, num);
 2447|      0|            }
 2448|       |            // digit required
 2449|      5|            BOOST_STATIC_CONSTEXPR source_location loc
 2450|      5|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      5|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2451|      5|            return fail(cs.begin(), error::syntax, &loc);
 2452|      5|        }
 2453|    348|        char const c = *cs;
 2454|    348|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|    695|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 7, False: 341]
  |  |  |  Branch (179:54): [True: 1, False: 347]
  |  |  |  Branch (179:54): [True: 6, False: 341]
  |  |  ------------------
  ------------------
 2455|    348|            c < '0' || c > '9'))
 2456|      7|        {
 2457|       |            // digit required
 2458|      7|            BOOST_STATIC_CONSTEXPR source_location loc
 2459|      7|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      7|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2460|      7|            return fail(cs.begin(), error::syntax, &loc);
 2461|      7|        }
 2462|    348|    }
 2463|       |
 2464|       |    //----------------------------------
 2465|       |    //
 2466|       |    // 1*DIGIT
 2467|       |    // significant digits
 2468|       |    // to the right of decimal
 2469|       |    //
 2470|  1.76k|do_num8:
 2471|  1.76k|    for(;;)
 2472|  5.44k|    {
 2473|  5.44k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  5.44k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 122, False: 5.32k]
  |  |  ------------------
  ------------------
 2474|    122|        {
 2475|    122|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    122|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 122]
  |  |  ------------------
  ------------------
 2476|      0|            {
 2477|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2478|      0|                    ! h_.on_number_part(
 2479|      0|                        {begin, cs.used(begin)}, ec_)))
 2480|      0|                    return fail(cs.begin());
 2481|       |
 2482|      0|                if( precise_parsing )
  ------------------
  |  Branch (2482:21): [True: 0, False: 0]
  ------------------
 2483|      0|                    num_buf_.append( begin, cs.used(begin) );
 2484|      0|                return suspend(cs.begin(), state::num8, num);
 2485|      0|            }
 2486|    122|            goto finish_dub;
 2487|    122|        }
 2488|  5.32k|        char const c = *cs;
 2489|  5.32k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  10.1k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 4.62k, False: 692]
  |  |  |  Branch (171:52): [True: 4.85k, False: 461]
  |  |  |  Branch (171:52): [True: 4.62k, False: 231]
  |  |  ------------------
  ------------------
 2490|  5.32k|            c >= '0' && c <= '9'))
 2491|  4.62k|        {
 2492|  4.62k|            ++cs;
 2493|  4.62k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  4.62k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 3.67k, False: 951]
  |  |  ------------------
  ------------------
 2494|  4.62k|                num.mant <= 9007199254740991)) // 2^53-1
 2495|  3.67k|            {
 2496|  3.67k|                --num.bias;
 2497|  3.67k|                num.mant = 10 * num.mant + ( c - '0' );
 2498|  3.67k|            }
 2499|    951|            else
 2500|    951|            {
 2501|    951|                goto do_num5;
 2502|    951|            }
 2503|  4.62k|        }
 2504|    692|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2504:17): [True: 225, False: 467]
  ------------------
 2505|    225|        {
 2506|    225|            ++cs;
 2507|    225|            goto do_exp1;
 2508|    225|        }
 2509|    467|        else
 2510|    467|        {
 2511|    467|            goto finish_dub;
 2512|    467|        }
 2513|  5.32k|    }
 2514|       |
 2515|       |    //----------------------------------
 2516|       |    //
 2517|       |    // *[+-]
 2518|       |    //
 2519|  3.29k|do_exp1:
 2520|  3.29k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  3.29k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 21, False: 3.27k]
  |  |  ------------------
  ------------------
 2521|     21|    {
 2522|     21|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|     21|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 21]
  |  |  ------------------
  ------------------
 2523|     21|            ! h_.on_number_part(
 2524|     21|                {begin, cs.used(begin)}, ec_)))
 2525|      0|            return fail(cs.begin());
 2526|       |
 2527|     21|        if( precise_parsing )
  ------------------
  |  Branch (2527:13): [True: 0, False: 21]
  ------------------
 2528|      0|            num_buf_.append( begin, cs.used(begin) );
 2529|     21|        return maybe_suspend(
 2530|     21|            cs.begin(), state::exp1, num);
 2531|     21|    }
 2532|  3.27k|    if(*cs == '+')
  ------------------
  |  Branch (2532:8): [True: 616, False: 2.65k]
  ------------------
 2533|    616|    {
 2534|    616|        ++cs;
 2535|    616|    }
 2536|  2.65k|    else if(*cs == '-')
  ------------------
  |  Branch (2536:13): [True: 800, False: 1.85k]
  ------------------
 2537|    800|    {
 2538|    800|        ++cs;
 2539|    800|        num.frac = true;
 2540|    800|    }
 2541|       |
 2542|       |    //----------------------------------
 2543|       |    //
 2544|       |    // DIGIT
 2545|       |    // first digit of the exponent
 2546|       |    //
 2547|  3.27k|do_exp2:
 2548|  3.27k|    {
 2549|  3.27k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  3.27k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 13, False: 3.26k]
  |  |  ------------------
  ------------------
 2550|     13|        {
 2551|     13|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     13|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 13]
  |  |  ------------------
  ------------------
 2552|      0|            {
 2553|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2554|      0|                    ! h_.on_number_part(
 2555|      0|                        {begin, cs.used(begin)}, ec_)))
 2556|      0|                    return fail(cs.begin());
 2557|       |
 2558|      0|                if( precise_parsing )
  ------------------
  |  Branch (2558:21): [True: 0, False: 0]
  ------------------
 2559|      0|                    num_buf_.append( begin, cs.used(begin) );
 2560|      0|                return suspend(cs.begin(), state::exp2, num);
 2561|      0|            }
 2562|       |            // digit required
 2563|     13|            BOOST_STATIC_CONSTEXPR source_location loc
 2564|     13|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     13|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2565|     13|            return fail(cs.begin(), error::syntax, &loc);
 2566|     13|        }
 2567|  3.26k|        char const c = *cs;
 2568|  3.26k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  6.49k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 24, False: 3.23k]
  |  |  |  Branch (179:54): [True: 22, False: 3.23k]
  |  |  |  Branch (179:54): [True: 2, False: 3.23k]
  |  |  ------------------
  ------------------
 2569|  3.26k|            c < '0' || c > '9'))
 2570|     24|        {
 2571|       |            // digit required
 2572|     24|            BOOST_STATIC_CONSTEXPR source_location loc
 2573|     24|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     24|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2574|     24|            return fail(cs.begin(), error::syntax, &loc);
 2575|     24|        }
 2576|  3.23k|        ++cs;
 2577|  3.23k|        num.exp = c - '0';
 2578|  3.23k|    }
 2579|       |
 2580|       |    //----------------------------------
 2581|       |    //
 2582|       |    // 1*DIGIT
 2583|       |    // subsequent digits in the exponent
 2584|       |    //
 2585|  3.23k|do_exp3:
 2586|  3.23k|    for(;;)
 2587|  8.65k|    {
 2588|  8.65k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  8.65k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 286, False: 8.37k]
  |  |  ------------------
  ------------------
 2589|    286|        {
 2590|    286|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    286|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 286]
  |  |  ------------------
  ------------------
 2591|      0|            {
 2592|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2593|      0|                    ! h_.on_number_part(
 2594|      0|                        {begin, cs.used(begin)}, ec_)))
 2595|      0|                    return fail(cs.begin());
 2596|       |
 2597|      0|                if( precise_parsing )
  ------------------
  |  Branch (2597:21): [True: 0, False: 0]
  ------------------
 2598|      0|                    num_buf_.append( begin, cs.used(begin) );
 2599|      0|                return suspend(cs.begin(), state::exp3, num);
 2600|      0|            }
 2601|    286|        }
 2602|  8.37k|        else
 2603|  8.37k|        {
 2604|  8.37k|            char const c = *cs;
 2605|  8.37k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  13.8k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 5.43k, False: 2.94k]
  |  |  |  Branch (171:52): [True: 5.44k, False: 2.93k]
  |  |  |  Branch (171:52): [True: 5.43k, False: 8]
  |  |  ------------------
  ------------------
 2606|  8.37k|                c >= '0' && c <= '9'))
 2607|  5.43k|            {
 2608|  5.43k|                if(BOOST_JSON_UNLIKELY
  ------------------
  |  |  179|  16.4k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 10, False: 5.42k]
  |  |  |  Branch (179:54): [True: 204, False: 5.22k]
  |  |  |  Branch (179:54): [True: 6, False: 198]
  |  |  |  Branch (179:54): [True: 4, False: 5.42k]
  |  |  ------------------
  ------------------
 2609|       |                //              2147483647 INT_MAX
 2610|  5.43k|                    (num.exp  > 214748364 || (
 2611|  5.43k|                        num.exp == 214748364 && c > '7')))
 2612|     10|                {
 2613|     10|                    BOOST_STATIC_CONSTEXPR source_location loc
 2614|     10|                        = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     10|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2615|     10|                    return fail(cs.begin(), error::exponent_overflow, &loc);
 2616|     10|                }
 2617|  5.42k|                ++cs;
 2618|  5.42k|                num.exp = 10 * num.exp + ( c - '0' );
 2619|  5.42k|                continue;
 2620|  5.43k|            }
 2621|  8.37k|        }
 2622|  3.22k|        BOOST_ASSERT(num.exp >= 0);
  ------------------
  |  |   60|  3.22k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2623|  3.22k|        if ( num.frac )
  ------------------
  |  Branch (2623:14): [True: 794, False: 2.43k]
  ------------------
 2624|    794|        {
 2625|    794|            if (BOOST_JSON_UNLIKELY( num.bias  < (INT_MIN + num.exp) ))
  ------------------
  |  |  179|    794|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1, False: 793]
  |  |  ------------------
  ------------------
 2626|      1|            {
 2627|      1|                BOOST_STATIC_CONSTEXPR source_location loc
 2628|      1|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      1|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2629|      1|                return fail(cs.begin(), error::exponent_overflow, &loc);
 2630|      1|            }
 2631|    794|        }
 2632|  2.43k|        else
 2633|  2.43k|        {
 2634|  2.43k|            if (BOOST_JSON_UNLIKELY( num.bias > (INT_MAX - num.exp) ))
  ------------------
  |  |  179|  2.43k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 2.43k]
  |  |  ------------------
  ------------------
 2635|      0|            {
 2636|      0|                BOOST_STATIC_CONSTEXPR source_location loc
 2637|      0|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2638|      0|                return fail(cs.begin(), error::exponent_overflow, &loc);
 2639|      0|            }
 2640|  2.43k|        }
 2641|  3.22k|        goto finish_dub;
 2642|  3.22k|    }
 2643|       |
 2644|    776|finish_int:
 2645|    776|    if(negative || (!stack_empty && num.neg))
  ------------------
  |  Branch (2645:8): [Folded - Ignored]
  |  Branch (2645:21): [Folded - Ignored]
  |  Branch (2645:37): [True: 0, False: 0]
  ------------------
 2646|      0|    {
 2647|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2648|      0|            ! h_.on_int64(static_cast<
 2649|      0|                int64_t>(~num.mant + 1), {begin, cs.used(begin)}, ec_)))
 2650|      0|            return fail(cs.begin());
 2651|      0|        return cs.begin();
 2652|      0|    }
 2653|    776|    if(num.mant <= INT64_MAX)
  ------------------
  |  Branch (2653:8): [True: 776, False: 0]
  ------------------
 2654|    776|    {
 2655|   498k|finish_signed:
 2656|   498k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|   498k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 498k]
  |  |  ------------------
  ------------------
 2657|   498k|            ! h_.on_int64(static_cast<
 2658|   498k|                int64_t>(num.mant), {begin, cs.used(begin)}, ec_)))
 2659|      0|            return fail(cs.begin());
 2660|   498k|        return cs.begin();
 2661|   498k|    }
 2662|      0|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2663|      0|        ! h_.on_uint64(num.mant, {begin, cs.used(begin)}, ec_)))
 2664|      0|        return fail(cs.begin());
 2665|      0|    return cs.begin();
 2666|  7.43k|finish_dub:
 2667|  7.43k|    double d;
 2668|  7.43k|    std::size_t const size = cs.used(begin);
 2669|  7.43k|    BOOST_ASSERT( !num_buf_.size() || precise_parsing );
  ------------------
  |  |   60|  7.43k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2670|  7.43k|    if( precise_parsing )
  ------------------
  |  Branch (2670:9): [True: 0, False: 7.43k]
  ------------------
 2671|      0|    {
 2672|      0|        char const* data = begin;
 2673|       |         // if we previously suspended or if the current input ends with the
 2674|       |         // number, we need to copy the current part of the number to the
 2675|       |         // temporary buffer
 2676|      0|        if(BOOST_JSON_UNLIKELY( num_buf_.size() || !cs ))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2677|      0|        {
 2678|      0|            num_buf_.grow( size + 1 );
 2679|      0|            num_buf_.append( begin, size );
 2680|      0|            data = num_buf_.append( "\0", 1 );
 2681|      0|        }
 2682|      0|        d = std::strtod( data, nullptr );
 2683|      0|    }
 2684|  7.43k|    else
 2685|  7.43k|        d = detail::dec_to_float(
 2686|  7.43k|            num.mant,
 2687|  7.43k|            num.bias + (num.frac ?
  ------------------
  |  Branch (2687:25): [True: 793, False: 6.63k]
  ------------------
 2688|  6.63k|                -num.exp : num.exp),
 2689|  7.43k|            num.neg);
 2690|  7.43k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  7.43k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 7.43k]
  |  |  ------------------
  ------------------
 2691|  7.43k|        ! h_.on_double(d, {begin, size}, ec_)))
 2692|      0|        return fail(cs.begin());
 2693|  7.43k|    return cs.begin();
 2694|  7.43k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE13maybe_suspendEPKcNS4_5stateERKNS4_6numberE:
  353|    110|{
  354|    110|    end_ = p;
  355|    110|    if(BOOST_JSON_LIKELY(more_))
  ------------------
  |  |  171|    110|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 110]
  |  |  ------------------
  ------------------
  356|      0|    {
  357|       |        // suspend
  358|      0|        num_ = num;
  359|      0|        reserve();
  360|      0|        st_.push_unchecked(st);;
  361|      0|    }
  362|    110|    return sentinel();
  363|    110|}
_ZN5boost4json6detail12dec_to_floatEmib:
  148|  32.1k|{
  149|       |    // convert to double explicitly to silence warnings
  150|  32.1k|    double x = static_cast<double>(m);
  151|  32.1k|    if(neg)
  ------------------
  |  Branch (151:8): [True: 10.1k, False: 21.9k]
  ------------------
  152|  10.1k|        x = -x;
  153|       |
  154|  32.1k|    if(e < -305)
  ------------------
  |  Branch (154:8): [True: 1.78k, False: 30.3k]
  ------------------
  155|  1.78k|    {
  156|  1.78k|        x *= 1e-305 ;
  157|  1.78k|        e += 305;
  158|  1.78k|    }
  159|       |
  160|  32.1k|    if(e >= -22 && e < 0)
  ------------------
  |  Branch (160:8): [True: 29.7k, False: 2.38k]
  |  Branch (160:20): [True: 14.5k, False: 15.1k]
  ------------------
  161|  14.5k|        return x / pow10(-e);
  162|       |
  163|  17.5k|    return x * pow10(e);
  164|  32.1k|}
_ZN5boost4json6detail5pow10Ei:
   52|  32.1k|{
   53|  32.1k|    static double const tab[618] = {
   54|  32.1k|                        1e-308, 1e-307, 1e-306, 1e-305, 1e-304, 1e-303, 1e-302, 1e-301,
   55|       |
   56|  32.1k|        1e-300, 1e-299, 1e-298, 1e-297, 1e-296, 1e-295, 1e-294, 1e-293, 1e-292, 1e-291,
   57|  32.1k|        1e-290, 1e-289, 1e-288, 1e-287, 1e-286, 1e-285, 1e-284, 1e-283, 1e-282, 1e-281,
   58|  32.1k|        1e-280, 1e-279, 1e-278, 1e-277, 1e-276, 1e-275, 1e-274, 1e-273, 1e-272, 1e-271,
   59|  32.1k|        1e-270, 1e-269, 1e-268, 1e-267, 1e-266, 1e-265, 1e-264, 1e-263, 1e-262, 1e-261,
   60|  32.1k|        1e-260, 1e-259, 1e-258, 1e-257, 1e-256, 1e-255, 1e-254, 1e-253, 1e-252, 1e-251,
   61|  32.1k|        1e-250, 1e-249, 1e-248, 1e-247, 1e-246, 1e-245, 1e-244, 1e-243, 1e-242, 1e-241,
   62|  32.1k|        1e-240, 1e-239, 1e-238, 1e-237, 1e-236, 1e-235, 1e-234, 1e-233, 1e-232, 1e-231,
   63|  32.1k|        1e-230, 1e-229, 1e-228, 1e-227, 1e-226, 1e-225, 1e-224, 1e-223, 1e-222, 1e-221,
   64|  32.1k|        1e-220, 1e-219, 1e-218, 1e-217, 1e-216, 1e-215, 1e-214, 1e-213, 1e-212, 1e-211,
   65|  32.1k|        1e-210, 1e-209, 1e-208, 1e-207, 1e-206, 1e-205, 1e-204, 1e-203, 1e-202, 1e-201,
   66|       |
   67|  32.1k|        1e-200, 1e-199, 1e-198, 1e-197, 1e-196, 1e-195, 1e-194, 1e-193, 1e-192, 1e-191,
   68|  32.1k|        1e-190, 1e-189, 1e-188, 1e-187, 1e-186, 1e-185, 1e-184, 1e-183, 1e-182, 1e-181,
   69|  32.1k|        1e-180, 1e-179, 1e-178, 1e-177, 1e-176, 1e-175, 1e-174, 1e-173, 1e-172, 1e-171,
   70|  32.1k|        1e-170, 1e-169, 1e-168, 1e-167, 1e-166, 1e-165, 1e-164, 1e-163, 1e-162, 1e-161,
   71|  32.1k|        1e-160, 1e-159, 1e-158, 1e-157, 1e-156, 1e-155, 1e-154, 1e-153, 1e-152, 1e-151,
   72|  32.1k|        1e-150, 1e-149, 1e-148, 1e-147, 1e-146, 1e-145, 1e-144, 1e-143, 1e-142, 1e-141,
   73|  32.1k|        1e-140, 1e-139, 1e-138, 1e-137, 1e-136, 1e-135, 1e-134, 1e-133, 1e-132, 1e-131,
   74|  32.1k|        1e-130, 1e-129, 1e-128, 1e-127, 1e-126, 1e-125, 1e-124, 1e-123, 1e-122, 1e-121,
   75|  32.1k|        1e-120, 1e-119, 1e-118, 1e-117, 1e-116, 1e-115, 1e-114, 1e-113, 1e-112, 1e-111,
   76|  32.1k|        1e-110, 1e-109, 1e-108, 1e-107, 1e-106, 1e-105, 1e-104, 1e-103, 1e-102, 1e-101,
   77|       |
   78|  32.1k|        1e-100, 1e-099, 1e-098, 1e-097, 1e-096, 1e-095, 1e-094, 1e-093, 1e-092, 1e-091,
   79|  32.1k|        1e-090, 1e-089, 1e-088, 1e-087, 1e-086, 1e-085, 1e-084, 1e-083, 1e-082, 1e-081,
   80|  32.1k|        1e-080, 1e-079, 1e-078, 1e-077, 1e-076, 1e-075, 1e-074, 1e-073, 1e-072, 1e-071,
   81|  32.1k|        1e-070, 1e-069, 1e-068, 1e-067, 1e-066, 1e-065, 1e-064, 1e-063, 1e-062, 1e-061,
   82|  32.1k|        1e-060, 1e-059, 1e-058, 1e-057, 1e-056, 1e-055, 1e-054, 1e-053, 1e-052, 1e-051,
   83|  32.1k|        1e-050, 1e-049, 1e-048, 1e-047, 1e-046, 1e-045, 1e-044, 1e-043, 1e-042, 1e-041,
   84|  32.1k|        1e-040, 1e-039, 1e-038, 1e-037, 1e-036, 1e-035, 1e-034, 1e-033, 1e-032, 1e-031,
   85|  32.1k|        1e-030, 1e-029, 1e-028, 1e-027, 1e-026, 1e-025, 1e-024, 1e-023, 1e-022, 1e-021,
   86|  32.1k|        1e-020, 1e-019, 1e-018, 1e-017, 1e-016, 1e-015, 1e-014, 1e-013, 1e-012, 1e-011,
   87|  32.1k|        1e-010, 1e-009, 1e-008, 1e-007, 1e-006, 1e-005, 1e-004, 1e-003, 1e-002, 1e-001,
   88|       |
   89|  32.1k|        1e+000, 1e+001, 1e+002, 1e+003, 1e+004, 1e+005, 1e+006, 1e+007, 1e+008, 1e+009,
   90|  32.1k|        1e+010, 1e+011, 1e+012, 1e+013, 1e+014, 1e+015, 1e+016, 1e+017, 1e+018, 1e+019,
   91|  32.1k|        1e+020, 1e+021, 1e+022, 1e+023, 1e+024, 1e+025, 1e+026, 1e+027, 1e+028, 1e+029,
   92|  32.1k|        1e+030, 1e+031, 1e+032, 1e+033, 1e+034, 1e+035, 1e+036, 1e+037, 1e+038, 1e+039,
   93|  32.1k|        1e+040, 1e+041, 1e+042, 1e+043, 1e+044, 1e+045, 1e+046, 1e+047, 1e+048, 1e+049,
   94|  32.1k|        1e+050, 1e+051, 1e+052, 1e+053, 1e+054, 1e+055, 1e+056, 1e+057, 1e+058, 1e+059,
   95|  32.1k|        1e+060, 1e+061, 1e+062, 1e+063, 1e+064, 1e+065, 1e+066, 1e+067, 1e+068, 1e+069,
   96|  32.1k|        1e+070, 1e+071, 1e+072, 1e+073, 1e+074, 1e+075, 1e+076, 1e+077, 1e+078, 1e+079,
   97|  32.1k|        1e+080, 1e+081, 1e+082, 1e+083, 1e+084, 1e+085, 1e+086, 1e+087, 1e+088, 1e+089,
   98|  32.1k|        1e+090, 1e+091, 1e+092, 1e+093, 1e+094, 1e+095, 1e+096, 1e+097, 1e+098, 1e+099,
   99|       |
  100|  32.1k|        1e+100, 1e+101, 1e+102, 1e+103, 1e+104, 1e+105, 1e+106, 1e+107, 1e+108, 1e+109,
  101|  32.1k|        1e+110, 1e+111, 1e+112, 1e+113, 1e+114, 1e+115, 1e+116, 1e+117, 1e+118, 1e+119,
  102|  32.1k|        1e+120, 1e+121, 1e+122, 1e+123, 1e+124, 1e+125, 1e+126, 1e+127, 1e+128, 1e+129,
  103|  32.1k|        1e+130, 1e+131, 1e+132, 1e+133, 1e+134, 1e+135, 1e+136, 1e+137, 1e+138, 1e+139,
  104|  32.1k|        1e+140, 1e+141, 1e+142, 1e+143, 1e+144, 1e+145, 1e+146, 1e+147, 1e+148, 1e+149,
  105|  32.1k|        1e+150, 1e+151, 1e+152, 1e+153, 1e+154, 1e+155, 1e+156, 1e+157, 1e+158, 1e+159,
  106|  32.1k|        1e+160, 1e+161, 1e+162, 1e+163, 1e+164, 1e+165, 1e+166, 1e+167, 1e+168, 1e+169,
  107|  32.1k|        1e+170, 1e+171, 1e+172, 1e+173, 1e+174, 1e+175, 1e+176, 1e+177, 1e+178, 1e+179,
  108|  32.1k|        1e+180, 1e+181, 1e+182, 1e+183, 1e+184, 1e+185, 1e+186, 1e+187, 1e+188, 1e+189,
  109|  32.1k|        1e+190, 1e+191, 1e+192, 1e+193, 1e+194, 1e+195, 1e+196, 1e+197, 1e+198, 1e+199,
  110|       |
  111|  32.1k|        1e+200, 1e+201, 1e+202, 1e+203, 1e+204, 1e+205, 1e+206, 1e+207, 1e+208, 1e+209,
  112|  32.1k|        1e+210, 1e+211, 1e+212, 1e+213, 1e+214, 1e+215, 1e+216, 1e+217, 1e+218, 1e+219,
  113|  32.1k|        1e+220, 1e+221, 1e+222, 1e+223, 1e+224, 1e+225, 1e+226, 1e+227, 1e+228, 1e+229,
  114|  32.1k|        1e+230, 1e+231, 1e+232, 1e+233, 1e+234, 1e+235, 1e+236, 1e+237, 1e+238, 1e+239,
  115|  32.1k|        1e+240, 1e+241, 1e+242, 1e+243, 1e+244, 1e+245, 1e+246, 1e+247, 1e+248, 1e+249,
  116|  32.1k|        1e+250, 1e+251, 1e+252, 1e+253, 1e+254, 1e+255, 1e+256, 1e+257, 1e+258, 1e+259,
  117|  32.1k|        1e+260, 1e+261, 1e+262, 1e+263, 1e+264, 1e+265, 1e+266, 1e+267, 1e+268, 1e+269,
  118|  32.1k|        1e+270, 1e+271, 1e+272, 1e+273, 1e+274, 1e+275, 1e+276, 1e+277, 1e+278, 1e+279,
  119|  32.1k|        1e+280, 1e+281, 1e+282, 1e+283, 1e+284, 1e+285, 1e+286, 1e+287, 1e+288, 1e+289,
  120|  32.1k|        1e+290, 1e+291, 1e+292, 1e+293, 1e+294, 1e+295, 1e+296, 1e+297, 1e+298, 1e+299,
  121|       |
  122|  32.1k|        1e+300, 1e+301, 1e+302, 1e+303, 1e+304, 1e+305, 1e+306, 1e+307, 1e+308 };
  123|       |
  124|  32.1k|    if( exp > 308 )
  ------------------
  |  Branch (124:9): [True: 2.45k, False: 29.6k]
  ------------------
  125|  2.45k|    {
  126|  2.45k|        return std::numeric_limits<double>::infinity();
  127|  2.45k|    }
  128|  29.6k|    else if( exp < -308 )
  ------------------
  |  Branch (128:14): [True: 1.15k, False: 28.4k]
  ------------------
  129|  1.15k|    {
  130|       |        // due to the way pow10 is used by dec_to_float,
  131|       |        // we can afford to return 0.0 here
  132|  1.15k|        return 0.0;
  133|  1.15k|    }
  134|  28.4k|    else
  135|  28.4k|    {
  136|  28.4k|        exp += 308;
  137|  28.4k|        BOOST_ASSERT(exp >= 0 && exp < 618);
  ------------------
  |  |   60|  28.4k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  138|  28.4k|        return tab[exp];
  139|  28.4k|    }
  140|  32.1k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE12parse_numberILb1ELc45EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IcXT0_EEE:
 1971|  14.2k|{
 1972|       |    // only one of these will be true if we are not resuming
 1973|       |    // if negative then !zero_first && !nonzero_first
 1974|       |    // if zero_first then !nonzero_first && !negative
 1975|       |    // if nonzero_first then !zero_first && !negative
 1976|  14.2k|    bool const negative = first == '-';
 1977|  14.2k|    bool const zero_first = first == '0';
 1978|  14.2k|    bool const nonzero_first = first == '+';
 1979|  14.2k|    bool const precise_parsing = opt_.precise_parsing;
 1980|  14.2k|    detail::const_stream_wrapper cs(p, end_);
 1981|  14.2k|    number num;
 1982|  14.2k|    const char* begin = cs.begin();
 1983|  14.2k|    if(stack_empty || st_.empty())
  ------------------
  |  Branch (1983:8): [Folded - Ignored]
  |  Branch (1983:23): [True: 0, False: 0]
  ------------------
 1984|  14.2k|    {
 1985|  14.2k|        num.bias = 0;
 1986|  14.2k|        num.exp = 0;
 1987|  14.2k|        num.frac = false;
 1988|  14.2k|        num_buf_.clear();
 1989|       |
 1990|       |        //----------------------------------
 1991|       |        //
 1992|       |        // '-'
 1993|       |        // leading minus sign
 1994|       |        //
 1995|  14.2k|        BOOST_ASSERT(cs);
  ------------------
  |  |   60|  14.2k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1996|  14.2k|        if(negative)
  ------------------
  |  Branch (1996:12): [Folded - Ignored]
  ------------------
 1997|  14.2k|            ++cs;
 1998|       |
 1999|  14.2k|        num.neg = negative;
 2000|  14.2k|        num.frac = false;
 2001|  14.2k|        num.exp = 0;
 2002|  14.2k|        num.bias = 0;
 2003|       |
 2004|       |        // fast path
 2005|  14.2k|        if( cs.remain() >= 16 + 1 + 16 ) // digits . digits
  ------------------
  |  Branch (2005:13): [True: 12.8k, False: 1.39k]
  ------------------
 2006|  12.8k|        {
 2007|  12.8k|            int n1;
 2008|       |
 2009|  12.8k|            if( nonzero_first ||
  ------------------
  |  Branch (2009:17): [Folded - Ignored]
  ------------------
 2010|  12.8k|                (negative && *cs != '0') )
  ------------------
  |  Branch (2010:18): [Folded - Ignored]
  |  Branch (2010:30): [True: 8.85k, False: 4.04k]
  ------------------
 2011|  8.85k|            {
 2012|  8.85k|                n1 = detail::count_digits( cs.begin() );
 2013|  8.85k|                BOOST_ASSERT(n1 >= 0 && n1 <= 16);
  ------------------
  |  |   60|  8.85k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2014|       |
 2015|  8.85k|                if( negative && n1 == 0 && opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (2015:21): [Folded - Ignored]
  |  Branch (2015:33): [True: 11, False: 8.84k]
  |  Branch (2015:44): [True: 0, False: 11]
  ------------------
 2016|      0|                {
 2017|      0|                    return parse_literal(
 2018|      0|                        p - 1, mp11::mp_int<detail::neg_infinity_literal>());
 2019|      0|                }
 2020|       |
 2021|  8.85k|                if( ! nonzero_first && n1 == 0 )
  ------------------
  |  Branch (2021:21): [Folded - Ignored]
  |  Branch (2021:40): [True: 11, False: 8.84k]
  ------------------
 2022|     11|                {
 2023|       |                    // digit required
 2024|     11|                    BOOST_STATIC_CONSTEXPR source_location loc
 2025|     11|                        = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     11|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2026|     11|                    return fail(cs.begin(), error::syntax, &loc);
 2027|     11|                }
 2028|       |
 2029|  8.84k|                num.mant = detail::parse_unsigned( 0, cs.begin(), n1 );
 2030|       |
 2031|  8.84k|                cs += n1;
 2032|       |
 2033|       |                // integer or floating-point with
 2034|       |                // >= 16 leading digits
 2035|  8.84k|                if( n1 == 16 )
  ------------------
  |  Branch (2035:21): [True: 3.09k, False: 5.75k]
  ------------------
 2036|  3.09k|                {
 2037|  3.09k|                    goto do_num2;
 2038|  3.09k|                }
 2039|  8.84k|            }
 2040|  4.04k|            else
 2041|  4.04k|            {
 2042|       |                // 0. floating-point or 0e integer
 2043|  4.04k|                num.mant = 0;
 2044|  4.04k|                n1 = 0;
 2045|  4.04k|                ++cs;
 2046|  4.04k|            }
 2047|       |
 2048|  9.79k|            {
 2049|  9.79k|                const char c = *cs;
 2050|  9.79k|                if(c != '.')
  ------------------
  |  Branch (2050:20): [True: 5.05k, False: 4.74k]
  ------------------
 2051|  5.05k|                {
 2052|  5.05k|                    if((c | 32) == 'e')
  ------------------
  |  Branch (2052:24): [True: 2.19k, False: 2.85k]
  ------------------
 2053|  2.19k|                    {
 2054|  2.19k|                        ++cs;
 2055|  2.19k|                        goto do_exp1;
 2056|  2.19k|                    }
 2057|  2.85k|                    if(negative)
  ------------------
  |  Branch (2057:24): [Folded - Ignored]
  ------------------
 2058|  2.85k|                        num.mant = ~num.mant + 1;
 2059|  2.85k|                    goto finish_signed;
 2060|  5.05k|                }
 2061|  9.79k|            }
 2062|       |
 2063|       |            // floating-point number
 2064|       |
 2065|  4.74k|            ++cs;
 2066|       |
 2067|  4.74k|            int n2 = detail::count_digits( cs.begin() );
 2068|  4.74k|            BOOST_ASSERT(n2 >= 0 && n2 <= 16);
  ------------------
  |  |   60|  4.74k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2069|       |
 2070|  4.74k|            if( n2 == 0 )
  ------------------
  |  Branch (2070:17): [True: 4, False: 4.74k]
  ------------------
 2071|      4|            {
 2072|       |                // digit required
 2073|      4|                BOOST_STATIC_CONSTEXPR source_location loc
 2074|      4|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      4|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2075|      4|                return fail(cs.begin(), error::syntax, &loc);
 2076|      4|            }
 2077|       |
 2078|       |            // floating-point mantissa overflow
 2079|  4.74k|            if( n1 + n2 >= 19 )
  ------------------
  |  Branch (2079:17): [True: 281, False: 4.46k]
  ------------------
 2080|    281|            {
 2081|    281|                goto do_num7;
 2082|    281|            }
 2083|       |
 2084|  4.46k|            num.mant = detail::parse_unsigned( num.mant, cs.begin(), n2 );
 2085|       |
 2086|  4.46k|            BOOST_ASSERT(num.bias == 0);
  ------------------
  |  |   60|  4.46k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2087|       |
 2088|  4.46k|            num.bias -= n2;
 2089|       |
 2090|  4.46k|            cs += n2;
 2091|       |
 2092|  4.46k|            char ch = *cs;
 2093|       |
 2094|  4.46k|            if( (ch | 32) == 'e' )
  ------------------
  |  Branch (2094:17): [True: 228, False: 4.23k]
  ------------------
 2095|    228|            {
 2096|    228|                ++cs;
 2097|    228|                goto do_exp1;
 2098|    228|            }
 2099|  4.23k|            else if( ch >= '0' && ch <= '9' )
  ------------------
  |  Branch (2099:22): [True: 1.23k, False: 2.99k]
  |  Branch (2099:35): [True: 1.02k, False: 208]
  ------------------
 2100|  1.02k|            {
 2101|  1.02k|                goto do_num8;
 2102|  1.02k|            }
 2103|       |
 2104|  3.20k|            goto finish_dub;
 2105|  4.46k|        }
 2106|  14.2k|    }
 2107|      0|    else
 2108|      0|    {
 2109|      0|        num = num_;
 2110|      0|        state st;
 2111|      0|        st_.pop(st);
 2112|      0|        switch(st)
 2113|      0|        {
 2114|      0|        default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (2114:9): [True: 0, False: 0]
  ------------------
 2115|      0|        case state::num1: goto do_num1;
  ------------------
  |  Branch (2115:9): [True: 0, False: 0]
  ------------------
 2116|      0|        case state::num2: goto do_num2;
  ------------------
  |  Branch (2116:9): [True: 0, False: 0]
  ------------------
 2117|      0|        case state::num3: goto do_num3;
  ------------------
  |  Branch (2117:9): [True: 0, False: 0]
  ------------------
 2118|      0|        case state::num4: goto do_num4;
  ------------------
  |  Branch (2118:9): [True: 0, False: 0]
  ------------------
 2119|      0|        case state::num5: goto do_num5;
  ------------------
  |  Branch (2119:9): [True: 0, False: 0]
  ------------------
 2120|      0|        case state::num6: goto do_num6;
  ------------------
  |  Branch (2120:9): [True: 0, False: 0]
  ------------------
 2121|      0|        case state::num7: goto do_num7;
  ------------------
  |  Branch (2121:9): [True: 0, False: 0]
  ------------------
 2122|      0|        case state::num8: goto do_num8;
  ------------------
  |  Branch (2122:9): [True: 0, False: 0]
  ------------------
 2123|      0|        case state::exp1: goto do_exp1;
  ------------------
  |  Branch (2123:9): [True: 0, False: 0]
  ------------------
 2124|      0|        case state::exp2: goto do_exp2;
  ------------------
  |  Branch (2124:9): [True: 0, False: 0]
  ------------------
 2125|      0|        case state::exp3: goto do_exp3;
  ------------------
  |  Branch (2125:9): [True: 0, False: 0]
  ------------------
 2126|      0|        }
 2127|      0|    }
 2128|       |
 2129|       |    //----------------------------------
 2130|       |    //
 2131|       |    // DIGIT
 2132|       |    // first digit
 2133|       |    //
 2134|  1.39k|do_num1:
 2135|  1.39k|    if(zero_first || nonzero_first ||
  ------------------
  |  Branch (2135:8): [Folded - Ignored]
  |  Branch (2135:22): [Folded - Ignored]
  ------------------
 2136|  1.39k|        BOOST_JSON_LIKELY(cs))
  ------------------
  |  |  171|  1.39k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.37k, False: 14]
  |  |  ------------------
  ------------------
 2137|  1.37k|    {
 2138|  1.37k|        char const c = *cs;
 2139|  1.37k|        if(zero_first)
  ------------------
  |  Branch (2139:12): [Folded - Ignored]
  ------------------
 2140|      0|        {
 2141|      0|            ++cs;
 2142|      0|            num.mant = 0;
 2143|      0|            goto do_num6;
 2144|      0|        }
 2145|  1.37k|        else if(nonzero_first || BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  2.46k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.07k, False: 300]
  |  |  |  Branch (171:52): [True: 1.08k, False: 291]
  |  |  |  Branch (171:52): [True: 1.07k, False: 9]
  |  |  ------------------
  ------------------
  |  Branch (2145:17): [Folded - Ignored]
  ------------------
 2146|  1.37k|            c >= '1' && c <= '9'))
 2147|  1.07k|        {
 2148|  1.07k|            ++cs;
 2149|  1.07k|            num.mant = c - '0';
 2150|  1.07k|        }
 2151|    300|        else if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|    300|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 272, False: 28]
  |  |  ------------------
  ------------------
 2152|    300|            c == '0'))
 2153|    272|        {
 2154|    272|            ++cs;
 2155|    272|            num.mant = 0;
 2156|    272|            goto do_num6;
 2157|    272|        }
 2158|     28|        else if( (negative || num.neg) && opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (2158:19): [Folded - Ignored]
  |  Branch (2158:31): [True: 0, False: 0]
  |  Branch (2158:43): [True: 0, False: 28]
  ------------------
 2159|      0|        {
 2160|      0|            st_.push(state::lit1);
 2161|      0|            cur_lit_ = detail::neg_infinity_literal;
 2162|      0|            lit_offset_ = 1;
 2163|      0|            return parse_literal(
 2164|      0|                cs.begin(), mp11::mp_int<detail::resume_literal>() );
 2165|      0|        }
 2166|     28|        else
 2167|     28|        {
 2168|     28|            BOOST_STATIC_CONSTEXPR source_location loc
 2169|     28|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     28|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2170|     28|            return fail(cs.begin(), error::syntax, &loc);
 2171|     28|        }
 2172|  1.37k|    }
 2173|     14|    else
 2174|     14|    {
 2175|     14|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|     14|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 14]
  |  |  ------------------
  ------------------
 2176|     14|            ! h_.on_number_part(
 2177|     14|                {begin, cs.used(begin)}, ec_)))
 2178|      0|            return fail(cs.begin());
 2179|       |
 2180|     14|        if( precise_parsing )
  ------------------
  |  Branch (2180:13): [True: 0, False: 14]
  ------------------
 2181|      0|            num_buf_.append( begin, cs.used(begin) );
 2182|     14|        return maybe_suspend(
 2183|     14|            cs.begin(), state::num1, num);
 2184|     14|    }
 2185|       |
 2186|       |    //----------------------------------
 2187|       |    //
 2188|       |    // 1*DIGIT
 2189|       |    // significant digits left of decimal
 2190|       |    //
 2191|  4.17k|do_num2:
 2192|  4.17k|    if(negative || (!stack_empty && num.neg))
  ------------------
  |  Branch (2192:8): [Folded - Ignored]
  |  Branch (2192:21): [Folded - Ignored]
  |  Branch (2192:37): [True: 0, False: 0]
  ------------------
 2193|  4.17k|    {
 2194|  4.17k|        for(;;)
 2195|  12.7k|        {
 2196|  12.7k|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  12.7k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 140, False: 12.6k]
  |  |  ------------------
  ------------------
 2197|    140|            {
 2198|    140|                if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    140|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 140]
  |  |  ------------------
  ------------------
 2199|      0|                {
 2200|      0|                    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2201|      0|                        ! h_.on_number_part(
 2202|      0|                            {begin, cs.used(begin)}, ec_)))
 2203|      0|                        return fail(cs.begin());
 2204|       |
 2205|      0|                    if( precise_parsing )
  ------------------
  |  Branch (2205:25): [True: 0, False: 0]
  ------------------
 2206|      0|                        num_buf_.append( begin, cs.used(begin) );
 2207|      0|                    return suspend(cs.begin(), state::num2, num);
 2208|      0|                }
 2209|    140|                goto finish_int;
 2210|    140|            }
 2211|  12.6k|            char const c = *cs;
 2212|  12.6k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  23.3k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 10.1k, False: 2.52k]
  |  |  |  Branch (171:52): [True: 10.7k, False: 1.91k]
  |  |  |  Branch (171:52): [True: 10.1k, False: 605]
  |  |  ------------------
  ------------------
 2213|  12.6k|                c >= '0' && c <= '9'))
 2214|  10.1k|            {
 2215|  10.1k|                ++cs;
 2216|       |                //              9223372036854775808 INT64_MIN
 2217|  10.1k|                if( num.mant  > 922337203685477580 || (
  ------------------
  |  Branch (2217:21): [True: 1.21k, False: 8.92k]
  ------------------
 2218|  8.92k|                    num.mant == 922337203685477580 && c > '8'))
  ------------------
  |  Branch (2218:21): [True: 498, False: 8.42k]
  |  Branch (2218:55): [True: 299, False: 199]
  ------------------
 2219|  1.50k|                    break;
 2220|  8.62k|                num.mant = 10 * num.mant + ( c - '0' );
 2221|  8.62k|                continue;
 2222|  10.1k|            }
 2223|  2.52k|            goto do_num6; // [.eE]
 2224|  12.6k|        }
 2225|  4.17k|    }
 2226|      0|    else
 2227|      0|    {
 2228|      0|        for(;;)
 2229|      0|        {
 2230|      0|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2231|      0|            {
 2232|      0|                if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2233|      0|                {
 2234|      0|                    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2235|      0|                        ! h_.on_number_part(
 2236|      0|                            {begin, cs.used(begin)}, ec_)))
 2237|      0|                        return fail(cs.begin());
 2238|       |
 2239|      0|                    if( precise_parsing )
  ------------------
  |  Branch (2239:25): [True: 0, False: 0]
  ------------------
 2240|      0|                        num_buf_.append( begin, cs.used(begin) );
 2241|      0|                    return suspend(cs.begin(), state::num2, num);
 2242|      0|                }
 2243|      0|                goto finish_int;
 2244|      0|            }
 2245|      0|            char const c = *cs;
 2246|      0|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2247|      0|                c >= '0' && c <= '9'))
 2248|      0|            {
 2249|      0|                ++cs;
 2250|       |                //              18446744073709551615 UINT64_MAX
 2251|      0|                if( num.mant  > 1844674407370955161 || (
  ------------------
  |  Branch (2251:21): [True: 0, False: 0]
  ------------------
 2252|      0|                    num.mant == 1844674407370955161 && c > '5'))
  ------------------
  |  Branch (2252:21): [True: 0, False: 0]
  |  Branch (2252:56): [True: 0, False: 0]
  ------------------
 2253|      0|                    break;
 2254|      0|                num.mant = 10 * num.mant + ( c - '0' );
 2255|      0|            }
 2256|      0|            else
 2257|      0|            {
 2258|      0|                goto do_num6; // [.eE]
 2259|      0|            }
 2260|      0|        }
 2261|      0|    }
 2262|  1.50k|    ++num.bias;
 2263|       |
 2264|       |    //----------------------------------
 2265|       |    //
 2266|       |    // 1*DIGIT
 2267|       |    // non-significant digits left of decimal
 2268|       |    //
 2269|  1.50k|do_num3:
 2270|  1.50k|    for(;;)
 2271|  1.05M|    {
 2272|  1.05M|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.05M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 25, False: 1.05M]
  |  |  ------------------
  ------------------
 2273|     25|        {
 2274|     25|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     25|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 25]
  |  |  ------------------
  ------------------
 2275|      0|            {
 2276|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2277|      0|                    ! h_.on_number_part(
 2278|      0|                        {begin, cs.used(begin)}, ec_)))
 2279|      0|                    return fail(cs.begin());
 2280|       |
 2281|      0|                if( precise_parsing )
  ------------------
  |  Branch (2281:21): [True: 0, False: 0]
  ------------------
 2282|      0|                    num_buf_.append( begin, cs.used(begin) );
 2283|      0|                return suspend(cs.begin(), state::num3, num);
 2284|      0|            }
 2285|     25|            goto finish_dub;
 2286|     25|        }
 2287|  1.05M|        char const c = *cs;
 2288|  1.05M|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.10M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1.04M, False: 1.48k]
  |  |  |  Branch (179:54): [True: 1.04M, False: 1.27k]
  |  |  |  Branch (179:54): [True: 1.04M, False: 211]
  |  |  ------------------
  ------------------
 2289|  1.05M|            c >= '0' && c <= '9'))
 2290|  1.04M|        {
 2291|  1.04M|            ++cs;
 2292|       |            // VFALCO check overflow
 2293|  1.04M|            ++num.bias;
 2294|  1.04M|        }
 2295|  1.48k|        else if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  1.48k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 277, False: 1.20k]
  |  |  ------------------
  ------------------
 2296|  1.48k|            c == '.'))
 2297|    277|        {
 2298|    277|            ++cs;
 2299|    277|            break;
 2300|    277|        }
 2301|  1.20k|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2301:17): [True: 209, False: 998]
  ------------------
 2302|    209|        {
 2303|    209|            ++cs;
 2304|    209|            goto do_exp1;
 2305|    209|        }
 2306|    998|        else
 2307|    998|        {
 2308|    998|            goto finish_dub;
 2309|    998|        }
 2310|  1.05M|    }
 2311|       |
 2312|       |    //----------------------------------
 2313|       |    //
 2314|       |    // DIGIT
 2315|       |    // first non-significant digit
 2316|       |    // to the right of decimal
 2317|       |    //
 2318|    277|do_num4:
 2319|    277|    {
 2320|    277|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|    277|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 6, False: 271]
  |  |  ------------------
  ------------------
 2321|      6|        {
 2322|      6|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      6|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 2323|      6|                ! h_.on_number_part(
 2324|      6|                    {begin, cs.used(begin)}, ec_)))
 2325|      0|                return fail(cs.begin());
 2326|       |
 2327|      6|            if( precise_parsing )
  ------------------
  |  Branch (2327:17): [True: 0, False: 6]
  ------------------
 2328|      0|                num_buf_.append( begin, cs.used(begin) );
 2329|      6|            return maybe_suspend(
 2330|      6|                cs.begin(), state::num4, num);
 2331|      6|        }
 2332|    271|        char const c = *cs;
 2333|    271|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|    533|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 261, False: 10]
  |  |  |  Branch (171:52): [True: 262, False: 9]
  |  |  |  Branch (171:52): [True: 261, False: 1]
  |  |  ------------------
  ------------------
 2334|       |            //static_cast<unsigned char>(c - '0') < 10))
 2335|    271|            c >= '0' && c <= '9'))
 2336|    261|        {
 2337|    261|            ++cs;
 2338|    261|        }
 2339|     10|        else
 2340|     10|        {
 2341|       |            // digit required
 2342|     10|            BOOST_STATIC_CONSTEXPR source_location loc
 2343|     10|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     10|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2344|     10|            return fail(cs.begin(), error::syntax, &loc);
 2345|     10|        }
 2346|    271|    }
 2347|       |
 2348|       |    //----------------------------------
 2349|       |    //
 2350|       |    // 1*DIGIT
 2351|       |    // non-significant digits
 2352|       |    // to the right of decimal
 2353|       |    //
 2354|  1.14k|do_num5:
 2355|  1.14k|    for(;;)
 2356|  3.93k|    {
 2357|  3.93k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  3.93k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 36, False: 3.89k]
  |  |  ------------------
  ------------------
 2358|     36|        {
 2359|     36|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     36|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 36]
  |  |  ------------------
  ------------------
 2360|      0|            {
 2361|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2362|      0|                    ! h_.on_number_part(
 2363|      0|                        {begin, cs.used(begin)}, ec_)))
 2364|      0|                    return fail(cs.begin());
 2365|       |
 2366|      0|                if( precise_parsing )
  ------------------
  |  Branch (2366:21): [True: 0, False: 0]
  ------------------
 2367|      0|                    num_buf_.append( begin, cs.used(begin) );
 2368|      0|                return suspend(cs.begin(), state::num5, num);
 2369|      0|            }
 2370|     36|            goto finish_dub;
 2371|     36|        }
 2372|  3.89k|        char const c = *cs;
 2373|  3.89k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  6.95k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 2.78k, False: 1.10k]
  |  |  |  Branch (171:52): [True: 3.05k, False: 838]
  |  |  |  Branch (171:52): [True: 2.78k, False: 271]
  |  |  ------------------
  ------------------
 2374|  3.89k|            c >= '0' && c <= '9'))
 2375|  2.78k|        {
 2376|  2.78k|            ++cs;
 2377|  2.78k|        }
 2378|  1.10k|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2378:17): [True: 267, False: 842]
  ------------------
 2379|    267|        {
 2380|    267|            ++cs;
 2381|    267|            goto do_exp1;
 2382|    267|        }
 2383|    842|        else
 2384|    842|        {
 2385|    842|            goto finish_dub;
 2386|    842|        }
 2387|  3.89k|    }
 2388|       |
 2389|       |    //----------------------------------
 2390|       |    //
 2391|       |    // [.eE]
 2392|       |    //
 2393|  2.79k|do_num6:
 2394|  2.79k|    {
 2395|  2.79k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.79k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 5, False: 2.78k]
  |  |  ------------------
  ------------------
 2396|      5|        {
 2397|      5|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      5|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 2398|      0|            {
 2399|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2400|      0|                    ! h_.on_number_part(
 2401|      0|                        {begin, cs.used(begin)}, ec_)))
 2402|      0|                    return fail(cs.begin());
 2403|       |
 2404|      0|                if( precise_parsing )
  ------------------
  |  Branch (2404:21): [True: 0, False: 0]
  ------------------
 2405|      0|                    num_buf_.append( begin, cs.used(begin) );
 2406|      0|                return suspend(cs.begin(), state::num6, num);
 2407|      0|            }
 2408|      5|            goto finish_int;
 2409|      5|        }
 2410|  2.78k|        char const c = *cs;
 2411|  2.78k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  2.78k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.08k, False: 1.70k]
  |  |  ------------------
  ------------------
 2412|  2.78k|            c == '.'))
 2413|  1.08k|        {
 2414|  1.08k|            ++cs;
 2415|  1.08k|        }
 2416|  1.70k|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2416:17): [True: 735, False: 969]
  ------------------
 2417|    735|        {
 2418|    735|            ++cs;
 2419|    735|            goto do_exp1;
 2420|    735|        }
 2421|    969|        else
 2422|    969|        {
 2423|    969|            goto finish_int;
 2424|    969|        }
 2425|  2.78k|    }
 2426|       |
 2427|       |    //----------------------------------
 2428|       |    //
 2429|       |    // DIGIT
 2430|       |    // first significant digit
 2431|       |    // to the right of decimal
 2432|       |    //
 2433|  1.36k|do_num7:
 2434|  1.36k|    {
 2435|  1.36k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.36k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 6, False: 1.35k]
  |  |  ------------------
  ------------------
 2436|      6|        {
 2437|      6|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      6|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 2438|      0|            {
 2439|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2440|      0|                    ! h_.on_number_part(
 2441|      0|                        {begin, cs.used(begin)}, ec_)))
 2442|      0|                    return fail(cs.begin());
 2443|       |
 2444|      0|                if( precise_parsing )
  ------------------
  |  Branch (2444:21): [True: 0, False: 0]
  ------------------
 2445|      0|                    num_buf_.append( begin, cs.used(begin) );
 2446|      0|                return suspend(cs.begin(), state::num7, num);
 2447|      0|            }
 2448|       |            // digit required
 2449|      6|            BOOST_STATIC_CONSTEXPR source_location loc
 2450|      6|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      6|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2451|      6|            return fail(cs.begin(), error::syntax, &loc);
 2452|      6|        }
 2453|  1.35k|        char const c = *cs;
 2454|  1.35k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.71k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 10, False: 1.34k]
  |  |  |  Branch (179:54): [True: 4, False: 1.35k]
  |  |  |  Branch (179:54): [True: 6, False: 1.34k]
  |  |  ------------------
  ------------------
 2455|  1.35k|            c < '0' || c > '9'))
 2456|     10|        {
 2457|       |            // digit required
 2458|     10|            BOOST_STATIC_CONSTEXPR source_location loc
 2459|     10|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     10|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2460|     10|            return fail(cs.begin(), error::syntax, &loc);
 2461|     10|        }
 2462|  1.35k|    }
 2463|       |
 2464|       |    //----------------------------------
 2465|       |    //
 2466|       |    // 1*DIGIT
 2467|       |    // significant digits
 2468|       |    // to the right of decimal
 2469|       |    //
 2470|  2.37k|do_num8:
 2471|  2.37k|    for(;;)
 2472|  9.46k|    {
 2473|  9.46k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  9.46k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 116, False: 9.34k]
  |  |  ------------------
  ------------------
 2474|    116|        {
 2475|    116|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    116|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 116]
  |  |  ------------------
  ------------------
 2476|      0|            {
 2477|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2478|      0|                    ! h_.on_number_part(
 2479|      0|                        {begin, cs.used(begin)}, ec_)))
 2480|      0|                    return fail(cs.begin());
 2481|       |
 2482|      0|                if( precise_parsing )
  ------------------
  |  Branch (2482:21): [True: 0, False: 0]
  ------------------
 2483|      0|                    num_buf_.append( begin, cs.used(begin) );
 2484|      0|                return suspend(cs.begin(), state::num8, num);
 2485|      0|            }
 2486|    116|            goto finish_dub;
 2487|    116|        }
 2488|  9.34k|        char const c = *cs;
 2489|  9.34k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  18.1k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 7.97k, False: 1.37k]
  |  |  |  Branch (171:52): [True: 8.81k, False: 539]
  |  |  |  Branch (171:52): [True: 7.97k, False: 839]
  |  |  ------------------
  ------------------
 2490|  9.34k|            c >= '0' && c <= '9'))
 2491|  7.97k|        {
 2492|  7.97k|            ++cs;
 2493|  7.97k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  7.97k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 7.08k, False: 884]
  |  |  ------------------
  ------------------
 2494|  7.97k|                num.mant <= 9007199254740991)) // 2^53-1
 2495|  7.08k|            {
 2496|  7.08k|                --num.bias;
 2497|  7.08k|                num.mant = 10 * num.mant + ( c - '0' );
 2498|  7.08k|            }
 2499|    884|            else
 2500|    884|            {
 2501|    884|                goto do_num5;
 2502|    884|            }
 2503|  7.97k|        }
 2504|  1.37k|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2504:17): [True: 829, False: 549]
  ------------------
 2505|    829|        {
 2506|    829|            ++cs;
 2507|    829|            goto do_exp1;
 2508|    829|        }
 2509|    549|        else
 2510|    549|        {
 2511|    549|            goto finish_dub;
 2512|    549|        }
 2513|  9.34k|    }
 2514|       |
 2515|       |    //----------------------------------
 2516|       |    //
 2517|       |    // *[+-]
 2518|       |    //
 2519|  4.46k|do_exp1:
 2520|  4.46k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  4.46k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 31, False: 4.43k]
  |  |  ------------------
  ------------------
 2521|     31|    {
 2522|     31|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|     31|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 31]
  |  |  ------------------
  ------------------
 2523|     31|            ! h_.on_number_part(
 2524|     31|                {begin, cs.used(begin)}, ec_)))
 2525|      0|            return fail(cs.begin());
 2526|       |
 2527|     31|        if( precise_parsing )
  ------------------
  |  Branch (2527:13): [True: 0, False: 31]
  ------------------
 2528|      0|            num_buf_.append( begin, cs.used(begin) );
 2529|     31|        return maybe_suspend(
 2530|     31|            cs.begin(), state::exp1, num);
 2531|     31|    }
 2532|  4.43k|    if(*cs == '+')
  ------------------
  |  Branch (2532:8): [True: 213, False: 4.21k]
  ------------------
 2533|    213|    {
 2534|    213|        ++cs;
 2535|    213|    }
 2536|  4.21k|    else if(*cs == '-')
  ------------------
  |  Branch (2536:13): [True: 702, False: 3.51k]
  ------------------
 2537|    702|    {
 2538|    702|        ++cs;
 2539|    702|        num.frac = true;
 2540|    702|    }
 2541|       |
 2542|       |    //----------------------------------
 2543|       |    //
 2544|       |    // DIGIT
 2545|       |    // first digit of the exponent
 2546|       |    //
 2547|  4.43k|do_exp2:
 2548|  4.43k|    {
 2549|  4.43k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  4.43k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 14, False: 4.41k]
  |  |  ------------------
  ------------------
 2550|     14|        {
 2551|     14|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     14|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 14]
  |  |  ------------------
  ------------------
 2552|      0|            {
 2553|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2554|      0|                    ! h_.on_number_part(
 2555|      0|                        {begin, cs.used(begin)}, ec_)))
 2556|      0|                    return fail(cs.begin());
 2557|       |
 2558|      0|                if( precise_parsing )
  ------------------
  |  Branch (2558:21): [True: 0, False: 0]
  ------------------
 2559|      0|                    num_buf_.append( begin, cs.used(begin) );
 2560|      0|                return suspend(cs.begin(), state::exp2, num);
 2561|      0|            }
 2562|       |            // digit required
 2563|     14|            BOOST_STATIC_CONSTEXPR source_location loc
 2564|     14|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     14|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2565|     14|            return fail(cs.begin(), error::syntax, &loc);
 2566|     14|        }
 2567|  4.41k|        char const c = *cs;
 2568|  4.41k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  8.81k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 25, False: 4.39k]
  |  |  |  Branch (179:54): [True: 21, False: 4.39k]
  |  |  |  Branch (179:54): [True: 4, False: 4.39k]
  |  |  ------------------
  ------------------
 2569|  4.41k|            c < '0' || c > '9'))
 2570|     25|        {
 2571|       |            // digit required
 2572|     25|            BOOST_STATIC_CONSTEXPR source_location loc
 2573|     25|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     25|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2574|     25|            return fail(cs.begin(), error::syntax, &loc);
 2575|     25|        }
 2576|  4.39k|        ++cs;
 2577|  4.39k|        num.exp = c - '0';
 2578|  4.39k|    }
 2579|       |
 2580|       |    //----------------------------------
 2581|       |    //
 2582|       |    // 1*DIGIT
 2583|       |    // subsequent digits in the exponent
 2584|       |    //
 2585|  4.39k|do_exp3:
 2586|  4.39k|    for(;;)
 2587|  10.8k|    {
 2588|  10.8k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  10.8k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 323, False: 10.5k]
  |  |  ------------------
  ------------------
 2589|    323|        {
 2590|    323|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    323|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 323]
  |  |  ------------------
  ------------------
 2591|      0|            {
 2592|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2593|      0|                    ! h_.on_number_part(
 2594|      0|                        {begin, cs.used(begin)}, ec_)))
 2595|      0|                    return fail(cs.begin());
 2596|       |
 2597|      0|                if( precise_parsing )
  ------------------
  |  Branch (2597:21): [True: 0, False: 0]
  ------------------
 2598|      0|                    num_buf_.append( begin, cs.used(begin) );
 2599|      0|                return suspend(cs.begin(), state::exp3, num);
 2600|      0|            }
 2601|    323|        }
 2602|  10.5k|        else
 2603|  10.5k|        {
 2604|  10.5k|            char const c = *cs;
 2605|  10.5k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  17.0k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 6.47k, False: 4.05k]
  |  |  |  Branch (171:52): [True: 6.48k, False: 4.04k]
  |  |  |  Branch (171:52): [True: 6.47k, False: 12]
  |  |  ------------------
  ------------------
 2606|  10.5k|                c >= '0' && c <= '9'))
 2607|  6.47k|            {
 2608|  6.47k|                if(BOOST_JSON_UNLIKELY
  ------------------
  |  |  179|  19.6k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 9, False: 6.46k]
  |  |  |  Branch (179:54): [True: 221, False: 6.24k]
  |  |  |  Branch (179:54): [True: 2, False: 219]
  |  |  |  Branch (179:54): [True: 7, False: 6.47k]
  |  |  ------------------
  ------------------
 2609|       |                //              2147483647 INT_MAX
 2610|  6.47k|                    (num.exp  > 214748364 || (
 2611|  6.47k|                        num.exp == 214748364 && c > '7')))
 2612|      9|                {
 2613|      9|                    BOOST_STATIC_CONSTEXPR source_location loc
 2614|      9|                        = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      9|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2615|      9|                    return fail(cs.begin(), error::exponent_overflow, &loc);
 2616|      9|                }
 2617|  6.46k|                ++cs;
 2618|  6.46k|                num.exp = 10 * num.exp + ( c - '0' );
 2619|  6.46k|                continue;
 2620|  6.47k|            }
 2621|  10.5k|        }
 2622|  4.38k|        BOOST_ASSERT(num.exp >= 0);
  ------------------
  |  |   60|  4.38k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2623|  4.38k|        if ( num.frac )
  ------------------
  |  Branch (2623:14): [True: 694, False: 3.68k]
  ------------------
 2624|    694|        {
 2625|    694|            if (BOOST_JSON_UNLIKELY( num.bias  < (INT_MIN + num.exp) ))
  ------------------
  |  |  179|    694|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1, False: 693]
  |  |  ------------------
  ------------------
 2626|      1|            {
 2627|      1|                BOOST_STATIC_CONSTEXPR source_location loc
 2628|      1|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      1|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2629|      1|                return fail(cs.begin(), error::exponent_overflow, &loc);
 2630|      1|            }
 2631|    694|        }
 2632|  3.68k|        else
 2633|  3.68k|        {
 2634|  3.68k|            if (BOOST_JSON_UNLIKELY( num.bias > (INT_MAX - num.exp) ))
  ------------------
  |  |  179|  3.68k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 15, False: 3.67k]
  |  |  ------------------
  ------------------
 2635|     15|            {
 2636|     15|                BOOST_STATIC_CONSTEXPR source_location loc
 2637|     15|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     15|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2638|     15|                return fail(cs.begin(), error::exponent_overflow, &loc);
 2639|     15|            }
 2640|  3.68k|        }
 2641|  4.36k|        goto finish_dub;
 2642|  4.38k|    }
 2643|       |
 2644|  1.11k|finish_int:
 2645|  1.11k|    if(negative || (!stack_empty && num.neg))
  ------------------
  |  Branch (2645:8): [Folded - Ignored]
  |  Branch (2645:21): [Folded - Ignored]
  |  Branch (2645:37): [True: 0, False: 0]
  ------------------
 2646|  1.11k|    {
 2647|  1.11k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  1.11k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.11k]
  |  |  ------------------
  ------------------
 2648|  1.11k|            ! h_.on_int64(static_cast<
 2649|  1.11k|                int64_t>(~num.mant + 1), {begin, cs.used(begin)}, ec_)))
 2650|      0|            return fail(cs.begin());
 2651|  1.11k|        return cs.begin();
 2652|  1.11k|    }
 2653|      0|    if(num.mant <= INT64_MAX)
  ------------------
  |  Branch (2653:8): [True: 0, False: 0]
  ------------------
 2654|      0|    {
 2655|  2.85k|finish_signed:
 2656|  2.85k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.85k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 2.85k]
  |  |  ------------------
  ------------------
 2657|  2.85k|            ! h_.on_int64(static_cast<
 2658|  2.85k|                int64_t>(num.mant), {begin, cs.used(begin)}, ec_)))
 2659|      0|            return fail(cs.begin());
 2660|  2.85k|        return cs.begin();
 2661|  2.85k|    }
 2662|      0|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2663|      0|        ! h_.on_uint64(num.mant, {begin, cs.used(begin)}, ec_)))
 2664|      0|        return fail(cs.begin());
 2665|      0|    return cs.begin();
 2666|  10.1k|finish_dub:
 2667|  10.1k|    double d;
 2668|  10.1k|    std::size_t const size = cs.used(begin);
 2669|  10.1k|    BOOST_ASSERT( !num_buf_.size() || precise_parsing );
  ------------------
  |  |   60|  10.1k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2670|  10.1k|    if( precise_parsing )
  ------------------
  |  Branch (2670:9): [True: 0, False: 10.1k]
  ------------------
 2671|      0|    {
 2672|      0|        char const* data = begin;
 2673|       |         // if we previously suspended or if the current input ends with the
 2674|       |         // number, we need to copy the current part of the number to the
 2675|       |         // temporary buffer
 2676|      0|        if(BOOST_JSON_UNLIKELY( num_buf_.size() || !cs ))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2677|      0|        {
 2678|      0|            num_buf_.grow( size + 1 );
 2679|      0|            num_buf_.append( begin, size );
 2680|      0|            data = num_buf_.append( "\0", 1 );
 2681|      0|        }
 2682|      0|        d = std::strtod( data, nullptr );
 2683|      0|    }
 2684|  10.1k|    else
 2685|  10.1k|        d = detail::dec_to_float(
 2686|  10.1k|            num.mant,
 2687|  10.1k|            num.bias + (num.frac ?
  ------------------
  |  Branch (2687:25): [True: 693, False: 9.44k]
  ------------------
 2688|  9.44k|                -num.exp : num.exp),
 2689|  10.1k|            num.neg);
 2690|  10.1k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  10.1k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 10.1k]
  |  |  ------------------
  ------------------
 2691|  10.1k|        ! h_.on_double(d, {begin, size}, ec_)))
 2692|      0|        return fail(cs.begin());
 2693|  10.1k|    return cs.begin();
 2694|  10.1k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE12parse_numberILb1ELc43EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IcXT0_EEE:
 1971|  2.52M|{
 1972|       |    // only one of these will be true if we are not resuming
 1973|       |    // if negative then !zero_first && !nonzero_first
 1974|       |    // if zero_first then !nonzero_first && !negative
 1975|       |    // if nonzero_first then !zero_first && !negative
 1976|  2.52M|    bool const negative = first == '-';
 1977|  2.52M|    bool const zero_first = first == '0';
 1978|  2.52M|    bool const nonzero_first = first == '+';
 1979|  2.52M|    bool const precise_parsing = opt_.precise_parsing;
 1980|  2.52M|    detail::const_stream_wrapper cs(p, end_);
 1981|  2.52M|    number num;
 1982|  2.52M|    const char* begin = cs.begin();
 1983|  2.52M|    if(stack_empty || st_.empty())
  ------------------
  |  Branch (1983:8): [Folded - Ignored]
  |  Branch (1983:23): [True: 0, False: 0]
  ------------------
 1984|  2.52M|    {
 1985|  2.52M|        num.bias = 0;
 1986|  2.52M|        num.exp = 0;
 1987|  2.52M|        num.frac = false;
 1988|  2.52M|        num_buf_.clear();
 1989|       |
 1990|       |        //----------------------------------
 1991|       |        //
 1992|       |        // '-'
 1993|       |        // leading minus sign
 1994|       |        //
 1995|  2.52M|        BOOST_ASSERT(cs);
  ------------------
  |  |   60|  2.52M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1996|  2.52M|        if(negative)
  ------------------
  |  Branch (1996:12): [Folded - Ignored]
  ------------------
 1997|      0|            ++cs;
 1998|       |
 1999|  2.52M|        num.neg = negative;
 2000|  2.52M|        num.frac = false;
 2001|  2.52M|        num.exp = 0;
 2002|  2.52M|        num.bias = 0;
 2003|       |
 2004|       |        // fast path
 2005|  2.52M|        if( cs.remain() >= 16 + 1 + 16 ) // digits . digits
  ------------------
  |  Branch (2005:13): [True: 2.52M, False: 4.99k]
  ------------------
 2006|  2.52M|        {
 2007|  2.52M|            int n1;
 2008|       |
 2009|  2.52M|            if( nonzero_first ||
  ------------------
  |  Branch (2009:17): [Folded - Ignored]
  ------------------
 2010|  2.52M|                (negative && *cs != '0') )
  ------------------
  |  Branch (2010:18): [Folded - Ignored]
  |  Branch (2010:30): [True: 0, False: 0]
  ------------------
 2011|  2.52M|            {
 2012|  2.52M|                n1 = detail::count_digits( cs.begin() );
 2013|  2.52M|                BOOST_ASSERT(n1 >= 0 && n1 <= 16);
  ------------------
  |  |   60|  2.52M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2014|       |
 2015|  2.52M|                if( negative && n1 == 0 && opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (2015:21): [Folded - Ignored]
  |  Branch (2015:33): [True: 0, False: 0]
  |  Branch (2015:44): [True: 0, False: 0]
  ------------------
 2016|      0|                {
 2017|      0|                    return parse_literal(
 2018|      0|                        p - 1, mp11::mp_int<detail::neg_infinity_literal>());
 2019|      0|                }
 2020|       |
 2021|  2.52M|                if( ! nonzero_first && n1 == 0 )
  ------------------
  |  Branch (2021:21): [Folded - Ignored]
  |  Branch (2021:40): [True: 0, False: 0]
  ------------------
 2022|      0|                {
 2023|       |                    // digit required
 2024|      0|                    BOOST_STATIC_CONSTEXPR source_location loc
 2025|      0|                        = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2026|      0|                    return fail(cs.begin(), error::syntax, &loc);
 2027|      0|                }
 2028|       |
 2029|  2.52M|                num.mant = detail::parse_unsigned( 0, cs.begin(), n1 );
 2030|       |
 2031|  2.52M|                cs += n1;
 2032|       |
 2033|       |                // integer or floating-point with
 2034|       |                // >= 16 leading digits
 2035|  2.52M|                if( n1 == 16 )
  ------------------
  |  Branch (2035:21): [True: 5.71k, False: 2.51M]
  ------------------
 2036|  5.71k|                {
 2037|  5.71k|                    goto do_num2;
 2038|  5.71k|                }
 2039|  2.52M|            }
 2040|      0|            else
 2041|      0|            {
 2042|       |                // 0. floating-point or 0e integer
 2043|      0|                num.mant = 0;
 2044|      0|                n1 = 0;
 2045|      0|                ++cs;
 2046|      0|            }
 2047|       |
 2048|  2.51M|            {
 2049|  2.51M|                const char c = *cs;
 2050|  2.51M|                if(c != '.')
  ------------------
  |  Branch (2050:20): [True: 2.51M, False: 5.64k]
  ------------------
 2051|  2.51M|                {
 2052|  2.51M|                    if((c | 32) == 'e')
  ------------------
  |  Branch (2052:24): [True: 5.81k, False: 2.50M]
  ------------------
 2053|  5.81k|                    {
 2054|  5.81k|                        ++cs;
 2055|  5.81k|                        goto do_exp1;
 2056|  5.81k|                    }
 2057|  2.50M|                    if(negative)
  ------------------
  |  Branch (2057:24): [Folded - Ignored]
  ------------------
 2058|      0|                        num.mant = ~num.mant + 1;
 2059|  2.50M|                    goto finish_signed;
 2060|  2.51M|                }
 2061|  2.51M|            }
 2062|       |
 2063|       |            // floating-point number
 2064|       |
 2065|  5.64k|            ++cs;
 2066|       |
 2067|  5.64k|            int n2 = detail::count_digits( cs.begin() );
 2068|  5.64k|            BOOST_ASSERT(n2 >= 0 && n2 <= 16);
  ------------------
  |  |   60|  5.64k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2069|       |
 2070|  5.64k|            if( n2 == 0 )
  ------------------
  |  Branch (2070:17): [True: 2, False: 5.64k]
  ------------------
 2071|      2|            {
 2072|       |                // digit required
 2073|      2|                BOOST_STATIC_CONSTEXPR source_location loc
 2074|      2|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      2|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2075|      2|                return fail(cs.begin(), error::syntax, &loc);
 2076|      2|            }
 2077|       |
 2078|       |            // floating-point mantissa overflow
 2079|  5.64k|            if( n1 + n2 >= 19 )
  ------------------
  |  Branch (2079:17): [True: 386, False: 5.26k]
  ------------------
 2080|    386|            {
 2081|    386|                goto do_num7;
 2082|    386|            }
 2083|       |
 2084|  5.26k|            num.mant = detail::parse_unsigned( num.mant, cs.begin(), n2 );
 2085|       |
 2086|  5.26k|            BOOST_ASSERT(num.bias == 0);
  ------------------
  |  |   60|  5.26k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2087|       |
 2088|  5.26k|            num.bias -= n2;
 2089|       |
 2090|  5.26k|            cs += n2;
 2091|       |
 2092|  5.26k|            char ch = *cs;
 2093|       |
 2094|  5.26k|            if( (ch | 32) == 'e' )
  ------------------
  |  Branch (2094:17): [True: 1.20k, False: 4.05k]
  ------------------
 2095|  1.20k|            {
 2096|  1.20k|                ++cs;
 2097|  1.20k|                goto do_exp1;
 2098|  1.20k|            }
 2099|  4.05k|            else if( ch >= '0' && ch <= '9' )
  ------------------
  |  Branch (2099:22): [True: 1.10k, False: 2.95k]
  |  Branch (2099:35): [True: 536, False: 567]
  ------------------
 2100|    536|            {
 2101|    536|                goto do_num8;
 2102|    536|            }
 2103|       |
 2104|  3.52k|            goto finish_dub;
 2105|  5.26k|        }
 2106|  2.52M|    }
 2107|      0|    else
 2108|      0|    {
 2109|      0|        num = num_;
 2110|      0|        state st;
 2111|      0|        st_.pop(st);
 2112|      0|        switch(st)
 2113|      0|        {
 2114|      0|        default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (2114:9): [True: 0, False: 0]
  ------------------
 2115|      0|        case state::num1: goto do_num1;
  ------------------
  |  Branch (2115:9): [True: 0, False: 0]
  ------------------
 2116|      0|        case state::num2: goto do_num2;
  ------------------
  |  Branch (2116:9): [True: 0, False: 0]
  ------------------
 2117|      0|        case state::num3: goto do_num3;
  ------------------
  |  Branch (2117:9): [True: 0, False: 0]
  ------------------
 2118|      0|        case state::num4: goto do_num4;
  ------------------
  |  Branch (2118:9): [True: 0, False: 0]
  ------------------
 2119|      0|        case state::num5: goto do_num5;
  ------------------
  |  Branch (2119:9): [True: 0, False: 0]
  ------------------
 2120|      0|        case state::num6: goto do_num6;
  ------------------
  |  Branch (2120:9): [True: 0, False: 0]
  ------------------
 2121|      0|        case state::num7: goto do_num7;
  ------------------
  |  Branch (2121:9): [True: 0, False: 0]
  ------------------
 2122|      0|        case state::num8: goto do_num8;
  ------------------
  |  Branch (2122:9): [True: 0, False: 0]
  ------------------
 2123|      0|        case state::exp1: goto do_exp1;
  ------------------
  |  Branch (2123:9): [True: 0, False: 0]
  ------------------
 2124|      0|        case state::exp2: goto do_exp2;
  ------------------
  |  Branch (2124:9): [True: 0, False: 0]
  ------------------
 2125|      0|        case state::exp3: goto do_exp3;
  ------------------
  |  Branch (2125:9): [True: 0, False: 0]
  ------------------
 2126|      0|        }
 2127|      0|    }
 2128|       |
 2129|       |    //----------------------------------
 2130|       |    //
 2131|       |    // DIGIT
 2132|       |    // first digit
 2133|       |    //
 2134|  4.99k|do_num1:
 2135|  4.99k|    if(zero_first || nonzero_first ||
  ------------------
  |  Branch (2135:8): [Folded - Ignored]
  |  Branch (2135:22): [Folded - Ignored]
  ------------------
 2136|  4.99k|        BOOST_JSON_LIKELY(cs))
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2137|  4.99k|    {
 2138|  4.99k|        char const c = *cs;
 2139|  4.99k|        if(zero_first)
  ------------------
  |  Branch (2139:12): [Folded - Ignored]
  ------------------
 2140|      0|        {
 2141|      0|            ++cs;
 2142|      0|            num.mant = 0;
 2143|      0|            goto do_num6;
 2144|      0|        }
 2145|  4.99k|        else if(nonzero_first || BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2145:17): [Folded - Ignored]
  ------------------
 2146|  4.99k|            c >= '1' && c <= '9'))
 2147|  4.99k|        {
 2148|  4.99k|            ++cs;
 2149|  4.99k|            num.mant = c - '0';
 2150|  4.99k|        }
 2151|      0|        else if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2152|      0|            c == '0'))
 2153|      0|        {
 2154|      0|            ++cs;
 2155|      0|            num.mant = 0;
 2156|      0|            goto do_num6;
 2157|      0|        }
 2158|      0|        else if( (negative || num.neg) && opt_.allow_infinity_and_nan )
  ------------------
  |  Branch (2158:19): [Folded - Ignored]
  |  Branch (2158:31): [True: 0, False: 0]
  |  Branch (2158:43): [True: 0, False: 0]
  ------------------
 2159|      0|        {
 2160|      0|            st_.push(state::lit1);
 2161|      0|            cur_lit_ = detail::neg_infinity_literal;
 2162|      0|            lit_offset_ = 1;
 2163|      0|            return parse_literal(
 2164|      0|                cs.begin(), mp11::mp_int<detail::resume_literal>() );
 2165|      0|        }
 2166|      0|        else
 2167|      0|        {
 2168|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 2169|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2170|      0|            return fail(cs.begin(), error::syntax, &loc);
 2171|      0|        }
 2172|  4.99k|    }
 2173|      0|    else
 2174|      0|    {
 2175|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2176|      0|            ! h_.on_number_part(
 2177|      0|                {begin, cs.used(begin)}, ec_)))
 2178|      0|            return fail(cs.begin());
 2179|       |
 2180|      0|        if( precise_parsing )
  ------------------
  |  Branch (2180:13): [True: 0, False: 0]
  ------------------
 2181|      0|            num_buf_.append( begin, cs.used(begin) );
 2182|      0|        return maybe_suspend(
 2183|      0|            cs.begin(), state::num1, num);
 2184|      0|    }
 2185|       |
 2186|       |    //----------------------------------
 2187|       |    //
 2188|       |    // 1*DIGIT
 2189|       |    // significant digits left of decimal
 2190|       |    //
 2191|  10.7k|do_num2:
 2192|  10.7k|    if(negative || (!stack_empty && num.neg))
  ------------------
  |  Branch (2192:8): [Folded - Ignored]
  |  Branch (2192:21): [Folded - Ignored]
  |  Branch (2192:37): [True: 0, False: 0]
  ------------------
 2193|      0|    {
 2194|      0|        for(;;)
 2195|      0|        {
 2196|      0|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2197|      0|            {
 2198|      0|                if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2199|      0|                {
 2200|      0|                    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2201|      0|                        ! h_.on_number_part(
 2202|      0|                            {begin, cs.used(begin)}, ec_)))
 2203|      0|                        return fail(cs.begin());
 2204|       |
 2205|      0|                    if( precise_parsing )
  ------------------
  |  Branch (2205:25): [True: 0, False: 0]
  ------------------
 2206|      0|                        num_buf_.append( begin, cs.used(begin) );
 2207|      0|                    return suspend(cs.begin(), state::num2, num);
 2208|      0|                }
 2209|      0|                goto finish_int;
 2210|      0|            }
 2211|      0|            char const c = *cs;
 2212|      0|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|      0|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  |  Branch (171:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2213|      0|                c >= '0' && c <= '9'))
 2214|      0|            {
 2215|      0|                ++cs;
 2216|       |                //              9223372036854775808 INT64_MIN
 2217|      0|                if( num.mant  > 922337203685477580 || (
  ------------------
  |  Branch (2217:21): [True: 0, False: 0]
  ------------------
 2218|      0|                    num.mant == 922337203685477580 && c > '8'))
  ------------------
  |  Branch (2218:21): [True: 0, False: 0]
  |  Branch (2218:55): [True: 0, False: 0]
  ------------------
 2219|      0|                    break;
 2220|      0|                num.mant = 10 * num.mant + ( c - '0' );
 2221|      0|                continue;
 2222|      0|            }
 2223|      0|            goto do_num6; // [.eE]
 2224|      0|        }
 2225|      0|    }
 2226|  10.7k|    else
 2227|  10.7k|    {
 2228|  10.7k|        for(;;)
 2229|  29.4k|        {
 2230|  29.4k|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  29.4k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 312, False: 29.1k]
  |  |  ------------------
  ------------------
 2231|    312|            {
 2232|    312|                if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    312|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 312]
  |  |  ------------------
  ------------------
 2233|      0|                {
 2234|      0|                    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2235|      0|                        ! h_.on_number_part(
 2236|      0|                            {begin, cs.used(begin)}, ec_)))
 2237|      0|                        return fail(cs.begin());
 2238|       |
 2239|      0|                    if( precise_parsing )
  ------------------
  |  Branch (2239:25): [True: 0, False: 0]
  ------------------
 2240|      0|                        num_buf_.append( begin, cs.used(begin) );
 2241|      0|                    return suspend(cs.begin(), state::num2, num);
 2242|      0|                }
 2243|    312|                goto finish_int;
 2244|    312|            }
 2245|  29.1k|            char const c = *cs;
 2246|  29.1k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  50.5k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 19.9k, False: 9.24k]
  |  |  |  Branch (171:52): [True: 21.3k, False: 7.80k]
  |  |  |  Branch (171:52): [True: 19.9k, False: 1.43k]
  |  |  ------------------
  ------------------
 2247|  29.1k|                c >= '0' && c <= '9'))
 2248|  19.9k|            {
 2249|  19.9k|                ++cs;
 2250|       |                //              18446744073709551615 UINT64_MAX
 2251|  19.9k|                if( num.mant  > 1844674407370955161 || (
  ------------------
  |  Branch (2251:21): [True: 920, False: 19.0k]
  ------------------
 2252|  19.0k|                    num.mant == 1844674407370955161 && c > '5'))
  ------------------
  |  Branch (2252:21): [True: 459, False: 18.5k]
  |  Branch (2252:56): [True: 242, False: 217]
  ------------------
 2253|  1.16k|                    break;
 2254|  18.7k|                num.mant = 10 * num.mant + ( c - '0' );
 2255|  18.7k|            }
 2256|  9.24k|            else
 2257|  9.24k|            {
 2258|  9.24k|                goto do_num6; // [.eE]
 2259|  9.24k|            }
 2260|  29.1k|        }
 2261|  10.7k|    }
 2262|  1.16k|    ++num.bias;
 2263|       |
 2264|       |    //----------------------------------
 2265|       |    //
 2266|       |    // 1*DIGIT
 2267|       |    // non-significant digits left of decimal
 2268|       |    //
 2269|  1.16k|do_num3:
 2270|  1.16k|    for(;;)
 2271|  1.05M|    {
 2272|  1.05M|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.05M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 32, False: 1.05M]
  |  |  ------------------
  ------------------
 2273|     32|        {
 2274|     32|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     32|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 32]
  |  |  ------------------
  ------------------
 2275|      0|            {
 2276|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2277|      0|                    ! h_.on_number_part(
 2278|      0|                        {begin, cs.used(begin)}, ec_)))
 2279|      0|                    return fail(cs.begin());
 2280|       |
 2281|      0|                if( precise_parsing )
  ------------------
  |  Branch (2281:21): [True: 0, False: 0]
  ------------------
 2282|      0|                    num_buf_.append( begin, cs.used(begin) );
 2283|      0|                return suspend(cs.begin(), state::num3, num);
 2284|      0|            }
 2285|     32|            goto finish_dub;
 2286|     32|        }
 2287|  1.05M|        char const c = *cs;
 2288|  1.05M|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.10M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1.05M, False: 1.13k]
  |  |  |  Branch (179:54): [True: 1.05M, False: 902]
  |  |  |  Branch (179:54): [True: 1.05M, False: 228]
  |  |  ------------------
  ------------------
 2289|  1.05M|            c >= '0' && c <= '9'))
 2290|  1.05M|        {
 2291|  1.05M|            ++cs;
 2292|       |            // VFALCO check overflow
 2293|  1.05M|            ++num.bias;
 2294|  1.05M|        }
 2295|  1.13k|        else if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  1.13k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 241, False: 889]
  |  |  ------------------
  ------------------
 2296|  1.13k|            c == '.'))
 2297|    241|        {
 2298|    241|            ++cs;
 2299|    241|            break;
 2300|    241|        }
 2301|    889|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2301:17): [True: 220, False: 669]
  ------------------
 2302|    220|        {
 2303|    220|            ++cs;
 2304|    220|            goto do_exp1;
 2305|    220|        }
 2306|    669|        else
 2307|    669|        {
 2308|    669|            goto finish_dub;
 2309|    669|        }
 2310|  1.05M|    }
 2311|       |
 2312|       |    //----------------------------------
 2313|       |    //
 2314|       |    // DIGIT
 2315|       |    // first non-significant digit
 2316|       |    // to the right of decimal
 2317|       |    //
 2318|    241|do_num4:
 2319|    241|    {
 2320|    241|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|    241|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 5, False: 236]
  |  |  ------------------
  ------------------
 2321|      5|        {
 2322|      5|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      5|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 2323|      5|                ! h_.on_number_part(
 2324|      5|                    {begin, cs.used(begin)}, ec_)))
 2325|      0|                return fail(cs.begin());
 2326|       |
 2327|      5|            if( precise_parsing )
  ------------------
  |  Branch (2327:17): [True: 0, False: 5]
  ------------------
 2328|      0|                num_buf_.append( begin, cs.used(begin) );
 2329|      5|            return maybe_suspend(
 2330|      5|                cs.begin(), state::num4, num);
 2331|      5|        }
 2332|    236|        char const c = *cs;
 2333|    236|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|    464|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 223, False: 13]
  |  |  |  Branch (171:52): [True: 228, False: 8]
  |  |  |  Branch (171:52): [True: 223, False: 5]
  |  |  ------------------
  ------------------
 2334|       |            //static_cast<unsigned char>(c - '0') < 10))
 2335|    236|            c >= '0' && c <= '9'))
 2336|    223|        {
 2337|    223|            ++cs;
 2338|    223|        }
 2339|     13|        else
 2340|     13|        {
 2341|       |            // digit required
 2342|     13|            BOOST_STATIC_CONSTEXPR source_location loc
 2343|     13|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     13|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2344|     13|            return fail(cs.begin(), error::syntax, &loc);
 2345|     13|        }
 2346|    236|    }
 2347|       |
 2348|       |    //----------------------------------
 2349|       |    //
 2350|       |    // 1*DIGIT
 2351|       |    // non-significant digits
 2352|       |    // to the right of decimal
 2353|       |    //
 2354|  1.58k|do_num5:
 2355|  1.58k|    for(;;)
 2356|  3.53k|    {
 2357|  3.53k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  3.53k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 49, False: 3.48k]
  |  |  ------------------
  ------------------
 2358|     49|        {
 2359|     49|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     49|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 49]
  |  |  ------------------
  ------------------
 2360|      0|            {
 2361|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2362|      0|                    ! h_.on_number_part(
 2363|      0|                        {begin, cs.used(begin)}, ec_)))
 2364|      0|                    return fail(cs.begin());
 2365|       |
 2366|      0|                if( precise_parsing )
  ------------------
  |  Branch (2366:21): [True: 0, False: 0]
  ------------------
 2367|      0|                    num_buf_.append( begin, cs.used(begin) );
 2368|      0|                return suspend(cs.begin(), state::num5, num);
 2369|      0|            }
 2370|     49|            goto finish_dub;
 2371|     49|        }
 2372|  3.48k|        char const c = *cs;
 2373|  3.48k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  5.84k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.94k, False: 1.53k]
  |  |  |  Branch (171:52): [True: 2.35k, False: 1.12k]
  |  |  |  Branch (171:52): [True: 1.94k, False: 412]
  |  |  ------------------
  ------------------
 2374|  3.48k|            c >= '0' && c <= '9'))
 2375|  1.94k|        {
 2376|  1.94k|            ++cs;
 2377|  1.94k|        }
 2378|  1.53k|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2378:17): [True: 403, False: 1.13k]
  ------------------
 2379|    403|        {
 2380|    403|            ++cs;
 2381|    403|            goto do_exp1;
 2382|    403|        }
 2383|  1.13k|        else
 2384|  1.13k|        {
 2385|  1.13k|            goto finish_dub;
 2386|  1.13k|        }
 2387|  3.48k|    }
 2388|       |
 2389|       |    //----------------------------------
 2390|       |    //
 2391|       |    // [.eE]
 2392|       |    //
 2393|  9.24k|do_num6:
 2394|  9.24k|    {
 2395|  9.24k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  9.24k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 9.24k]
  |  |  ------------------
  ------------------
 2396|      0|        {
 2397|      0|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2398|      0|            {
 2399|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2400|      0|                    ! h_.on_number_part(
 2401|      0|                        {begin, cs.used(begin)}, ec_)))
 2402|      0|                    return fail(cs.begin());
 2403|       |
 2404|      0|                if( precise_parsing )
  ------------------
  |  Branch (2404:21): [True: 0, False: 0]
  ------------------
 2405|      0|                    num_buf_.append( begin, cs.used(begin) );
 2406|      0|                return suspend(cs.begin(), state::num6, num);
 2407|      0|            }
 2408|      0|            goto finish_int;
 2409|      0|        }
 2410|  9.24k|        char const c = *cs;
 2411|  9.24k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  9.24k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.11k, False: 8.12k]
  |  |  ------------------
  ------------------
 2412|  9.24k|            c == '.'))
 2413|  1.11k|        {
 2414|  1.11k|            ++cs;
 2415|  1.11k|        }
 2416|  8.12k|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2416:17): [True: 932, False: 7.19k]
  ------------------
 2417|    932|        {
 2418|    932|            ++cs;
 2419|    932|            goto do_exp1;
 2420|    932|        }
 2421|  7.19k|        else
 2422|  7.19k|        {
 2423|  7.19k|            goto finish_int;
 2424|  7.19k|        }
 2425|  9.24k|    }
 2426|       |
 2427|       |    //----------------------------------
 2428|       |    //
 2429|       |    // DIGIT
 2430|       |    // first significant digit
 2431|       |    // to the right of decimal
 2432|       |    //
 2433|  1.50k|do_num7:
 2434|  1.50k|    {
 2435|  1.50k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.50k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 6, False: 1.49k]
  |  |  ------------------
  ------------------
 2436|      6|        {
 2437|      6|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|      6|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 2438|      0|            {
 2439|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2440|      0|                    ! h_.on_number_part(
 2441|      0|                        {begin, cs.used(begin)}, ec_)))
 2442|      0|                    return fail(cs.begin());
 2443|       |
 2444|      0|                if( precise_parsing )
  ------------------
  |  Branch (2444:21): [True: 0, False: 0]
  ------------------
 2445|      0|                    num_buf_.append( begin, cs.used(begin) );
 2446|      0|                return suspend(cs.begin(), state::num7, num);
 2447|      0|            }
 2448|       |            // digit required
 2449|      6|            BOOST_STATIC_CONSTEXPR source_location loc
 2450|      6|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      6|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2451|      6|            return fail(cs.begin(), error::syntax, &loc);
 2452|      6|        }
 2453|  1.49k|        char const c = *cs;
 2454|  1.49k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.97k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 19, False: 1.47k]
  |  |  |  Branch (179:54): [True: 15, False: 1.48k]
  |  |  |  Branch (179:54): [True: 4, False: 1.47k]
  |  |  ------------------
  ------------------
 2455|  1.49k|            c < '0' || c > '9'))
 2456|     19|        {
 2457|       |            // digit required
 2458|     19|            BOOST_STATIC_CONSTEXPR source_location loc
 2459|     19|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     19|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2460|     19|            return fail(cs.begin(), error::syntax, &loc);
 2461|     19|        }
 2462|  1.49k|    }
 2463|       |
 2464|       |    //----------------------------------
 2465|       |    //
 2466|       |    // 1*DIGIT
 2467|       |    // significant digits
 2468|       |    // to the right of decimal
 2469|       |    //
 2470|  2.01k|do_num8:
 2471|  2.01k|    for(;;)
 2472|  7.93k|    {
 2473|  7.93k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  7.93k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 124, False: 7.81k]
  |  |  ------------------
  ------------------
 2474|    124|        {
 2475|    124|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    124|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 124]
  |  |  ------------------
  ------------------
 2476|      0|            {
 2477|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2478|      0|                    ! h_.on_number_part(
 2479|      0|                        {begin, cs.used(begin)}, ec_)))
 2480|      0|                    return fail(cs.begin());
 2481|       |
 2482|      0|                if( precise_parsing )
  ------------------
  |  Branch (2482:21): [True: 0, False: 0]
  ------------------
 2483|      0|                    num_buf_.append( begin, cs.used(begin) );
 2484|      0|                return suspend(cs.begin(), state::num8, num);
 2485|      0|            }
 2486|    124|            goto finish_dub;
 2487|    124|        }
 2488|  7.81k|        char const c = *cs;
 2489|  7.81k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  15.3k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 7.28k, False: 528]
  |  |  |  Branch (171:52): [True: 7.51k, False: 296]
  |  |  |  Branch (171:52): [True: 7.28k, False: 232]
  |  |  ------------------
  ------------------
 2490|  7.81k|            c >= '0' && c <= '9'))
 2491|  7.28k|        {
 2492|  7.28k|            ++cs;
 2493|  7.28k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  7.28k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 5.92k, False: 1.36k]
  |  |  ------------------
  ------------------
 2494|  7.28k|                num.mant <= 9007199254740991)) // 2^53-1
 2495|  5.92k|            {
 2496|  5.92k|                --num.bias;
 2497|  5.92k|                num.mant = 10 * num.mant + ( c - '0' );
 2498|  5.92k|            }
 2499|  1.36k|            else
 2500|  1.36k|            {
 2501|  1.36k|                goto do_num5;
 2502|  1.36k|            }
 2503|  7.28k|        }
 2504|    528|        else if((c | 32) == 'e')
  ------------------
  |  Branch (2504:17): [True: 221, False: 307]
  ------------------
 2505|    221|        {
 2506|    221|            ++cs;
 2507|    221|            goto do_exp1;
 2508|    221|        }
 2509|    307|        else
 2510|    307|        {
 2511|    307|            goto finish_dub;
 2512|    307|        }
 2513|  7.81k|    }
 2514|       |
 2515|       |    //----------------------------------
 2516|       |    //
 2517|       |    // *[+-]
 2518|       |    //
 2519|  8.79k|do_exp1:
 2520|  8.79k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  8.79k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 33, False: 8.76k]
  |  |  ------------------
  ------------------
 2521|     33|    {
 2522|     33|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|     33|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 33]
  |  |  ------------------
  ------------------
 2523|     33|            ! h_.on_number_part(
 2524|     33|                {begin, cs.used(begin)}, ec_)))
 2525|      0|            return fail(cs.begin());
 2526|       |
 2527|     33|        if( precise_parsing )
  ------------------
  |  Branch (2527:13): [True: 0, False: 33]
  ------------------
 2528|      0|            num_buf_.append( begin, cs.used(begin) );
 2529|     33|        return maybe_suspend(
 2530|     33|            cs.begin(), state::exp1, num);
 2531|     33|    }
 2532|  8.76k|    if(*cs == '+')
  ------------------
  |  Branch (2532:8): [True: 232, False: 8.53k]
  ------------------
 2533|    232|    {
 2534|    232|        ++cs;
 2535|    232|    }
 2536|  8.53k|    else if(*cs == '-')
  ------------------
  |  Branch (2536:13): [True: 1.60k, False: 6.92k]
  ------------------
 2537|  1.60k|    {
 2538|  1.60k|        ++cs;
 2539|  1.60k|        num.frac = true;
 2540|  1.60k|    }
 2541|       |
 2542|       |    //----------------------------------
 2543|       |    //
 2544|       |    // DIGIT
 2545|       |    // first digit of the exponent
 2546|       |    //
 2547|  8.76k|do_exp2:
 2548|  8.76k|    {
 2549|  8.76k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  8.76k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 14, False: 8.75k]
  |  |  ------------------
  ------------------
 2550|     14|        {
 2551|     14|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|     14|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 14]
  |  |  ------------------
  ------------------
 2552|      0|            {
 2553|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2554|      0|                    ! h_.on_number_part(
 2555|      0|                        {begin, cs.used(begin)}, ec_)))
 2556|      0|                    return fail(cs.begin());
 2557|       |
 2558|      0|                if( precise_parsing )
  ------------------
  |  Branch (2558:21): [True: 0, False: 0]
  ------------------
 2559|      0|                    num_buf_.append( begin, cs.used(begin) );
 2560|      0|                return suspend(cs.begin(), state::exp2, num);
 2561|      0|            }
 2562|       |            // digit required
 2563|     14|            BOOST_STATIC_CONSTEXPR source_location loc
 2564|     14|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     14|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2565|     14|            return fail(cs.begin(), error::syntax, &loc);
 2566|     14|        }
 2567|  8.75k|        char const c = *cs;
 2568|  8.75k|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  17.4k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 28, False: 8.72k]
  |  |  |  Branch (179:54): [True: 19, False: 8.73k]
  |  |  |  Branch (179:54): [True: 9, False: 8.72k]
  |  |  ------------------
  ------------------
 2569|  8.75k|            c < '0' || c > '9'))
 2570|     28|        {
 2571|       |            // digit required
 2572|     28|            BOOST_STATIC_CONSTEXPR source_location loc
 2573|     28|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     28|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2574|     28|            return fail(cs.begin(), error::syntax, &loc);
 2575|     28|        }
 2576|  8.72k|        ++cs;
 2577|  8.72k|        num.exp = c - '0';
 2578|  8.72k|    }
 2579|       |
 2580|       |    //----------------------------------
 2581|       |    //
 2582|       |    // 1*DIGIT
 2583|       |    // subsequent digits in the exponent
 2584|       |    //
 2585|  8.72k|do_exp3:
 2586|  8.72k|    for(;;)
 2587|  17.2k|    {
 2588|  17.2k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  17.2k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 321, False: 16.8k]
  |  |  ------------------
  ------------------
 2589|    321|        {
 2590|    321|            if(BOOST_JSON_UNLIKELY(more_))
  ------------------
  |  |  179|    321|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 321]
  |  |  ------------------
  ------------------
 2591|      0|            {
 2592|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2593|      0|                    ! h_.on_number_part(
 2594|      0|                        {begin, cs.used(begin)}, ec_)))
 2595|      0|                    return fail(cs.begin());
 2596|       |
 2597|      0|                if( precise_parsing )
  ------------------
  |  Branch (2597:21): [True: 0, False: 0]
  ------------------
 2598|      0|                    num_buf_.append( begin, cs.used(begin) );
 2599|      0|                return suspend(cs.begin(), state::exp3, num);
 2600|      0|            }
 2601|    321|        }
 2602|  16.8k|        else
 2603|  16.8k|        {
 2604|  16.8k|            char const c = *cs;
 2605|  16.8k|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  25.3k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 8.48k, False: 8.39k]
  |  |  |  Branch (171:52): [True: 8.49k, False: 8.38k]
  |  |  |  Branch (171:52): [True: 8.48k, False: 10]
  |  |  ------------------
  ------------------
 2606|  16.8k|                c >= '0' && c <= '9'))
 2607|  8.48k|            {
 2608|  8.48k|                if(BOOST_JSON_UNLIKELY
  ------------------
  |  |  179|  25.6k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 8, False: 8.48k]
  |  |  |  Branch (179:54): [True: 219, False: 8.26k]
  |  |  |  Branch (179:54): [True: 2, False: 217]
  |  |  |  Branch (179:54): [True: 6, False: 8.48k]
  |  |  ------------------
  ------------------
 2609|       |                //              2147483647 INT_MAX
 2610|  8.48k|                    (num.exp  > 214748364 || (
 2611|  8.48k|                        num.exp == 214748364 && c > '7')))
 2612|      8|                {
 2613|      8|                    BOOST_STATIC_CONSTEXPR source_location loc
 2614|      8|                        = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      8|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2615|      8|                    return fail(cs.begin(), error::exponent_overflow, &loc);
 2616|      8|                }
 2617|  8.48k|                ++cs;
 2618|  8.48k|                num.exp = 10 * num.exp + ( c - '0' );
 2619|  8.48k|                continue;
 2620|  8.48k|            }
 2621|  16.8k|        }
 2622|  8.71k|        BOOST_ASSERT(num.exp >= 0);
  ------------------
  |  |   60|  8.71k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2623|  8.71k|        if ( num.frac )
  ------------------
  |  Branch (2623:14): [True: 1.60k, False: 7.11k]
  ------------------
 2624|  1.60k|        {
 2625|  1.60k|            if (BOOST_JSON_UNLIKELY( num.bias  < (INT_MIN + num.exp) ))
  ------------------
  |  |  179|  1.60k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1, False: 1.59k]
  |  |  ------------------
  ------------------
 2626|      1|            {
 2627|      1|                BOOST_STATIC_CONSTEXPR source_location loc
 2628|      1|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      1|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2629|      1|                return fail(cs.begin(), error::exponent_overflow, &loc);
 2630|      1|            }
 2631|  1.60k|        }
 2632|  7.11k|        else
 2633|  7.11k|        {
 2634|  7.11k|            if (BOOST_JSON_UNLIKELY( num.bias > (INT_MAX - num.exp) ))
  ------------------
  |  |  179|  7.11k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 14, False: 7.10k]
  |  |  ------------------
  ------------------
 2635|     14|            {
 2636|     14|                BOOST_STATIC_CONSTEXPR source_location loc
 2637|     14|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     14|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 2638|     14|                return fail(cs.begin(), error::exponent_overflow, &loc);
 2639|     14|            }
 2640|  7.11k|        }
 2641|  8.69k|        goto finish_dub;
 2642|  8.71k|    }
 2643|       |
 2644|  7.50k|finish_int:
 2645|  7.50k|    if(negative || (!stack_empty && num.neg))
  ------------------
  |  Branch (2645:8): [Folded - Ignored]
  |  Branch (2645:21): [Folded - Ignored]
  |  Branch (2645:37): [True: 0, False: 0]
  ------------------
 2646|      0|    {
 2647|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2648|      0|            ! h_.on_int64(static_cast<
 2649|      0|                int64_t>(~num.mant + 1), {begin, cs.used(begin)}, ec_)))
 2650|      0|            return fail(cs.begin());
 2651|      0|        return cs.begin();
 2652|      0|    }
 2653|  7.50k|    if(num.mant <= INT64_MAX)
  ------------------
  |  Branch (2653:8): [True: 5.17k, False: 2.33k]
  ------------------
 2654|  5.17k|    {
 2655|  2.50M|finish_signed:
 2656|  2.50M|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.50M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 2.50M]
  |  |  ------------------
  ------------------
 2657|  2.50M|            ! h_.on_int64(static_cast<
 2658|  2.50M|                int64_t>(num.mant), {begin, cs.used(begin)}, ec_)))
 2659|      0|            return fail(cs.begin());
 2660|  2.50M|        return cs.begin();
 2661|  2.50M|    }
 2662|  2.33k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.33k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 2.33k]
  |  |  ------------------
  ------------------
 2663|  2.33k|        ! h_.on_uint64(num.mant, {begin, cs.used(begin)}, ec_)))
 2664|      0|        return fail(cs.begin());
 2665|  2.33k|    return cs.begin();
 2666|  14.5k|finish_dub:
 2667|  14.5k|    double d;
 2668|  14.5k|    std::size_t const size = cs.used(begin);
 2669|  14.5k|    BOOST_ASSERT( !num_buf_.size() || precise_parsing );
  ------------------
  |  |   60|  14.5k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2670|  14.5k|    if( precise_parsing )
  ------------------
  |  Branch (2670:9): [True: 0, False: 14.5k]
  ------------------
 2671|      0|    {
 2672|      0|        char const* data = begin;
 2673|       |         // if we previously suspended or if the current input ends with the
 2674|       |         // number, we need to copy the current part of the number to the
 2675|       |         // temporary buffer
 2676|      0|        if(BOOST_JSON_UNLIKELY( num_buf_.size() || !cs ))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  |  Branch (179:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2677|      0|        {
 2678|      0|            num_buf_.grow( size + 1 );
 2679|      0|            num_buf_.append( begin, size );
 2680|      0|            data = num_buf_.append( "\0", 1 );
 2681|      0|        }
 2682|      0|        d = std::strtod( data, nullptr );
 2683|      0|    }
 2684|  14.5k|    else
 2685|  14.5k|        d = detail::dec_to_float(
 2686|  14.5k|            num.mant,
 2687|  14.5k|            num.bias + (num.frac ?
  ------------------
  |  Branch (2687:25): [True: 1.59k, False: 12.9k]
  ------------------
 2688|  12.9k|                -num.exp : num.exp),
 2689|  14.5k|            num.neg);
 2690|  14.5k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  14.5k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 14.5k]
  |  |  ------------------
  ------------------
 2691|  14.5k|        ! h_.on_double(d, {begin, size}, ec_)))
 2692|      0|        return fail(cs.begin());
 2693|  14.5k|    return cs.begin();
 2694|  14.5k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE13parse_literalILi0EEEPKcS7_NSt3__117integral_constantIiXT_EEE:
  761|  3.55k|{
  762|  3.55k|    constexpr char const* literals[] = {
  763|  3.55k|        "null",
  764|  3.55k|        "true",
  765|  3.55k|        "false",
  766|  3.55k|        "Infinity",
  767|  3.55k|        "-Infinity",
  768|  3.55k|        "NaN",
  769|  3.55k|    };
  770|       |
  771|  3.55k|    constexpr std::size_t literal_sizes[] = {
  772|  3.55k|        4,
  773|  3.55k|        4,
  774|  3.55k|        5,
  775|  3.55k|        8,
  776|  3.55k|        9,
  777|  3.55k|        3,
  778|  3.55k|    };
  779|       |
  780|  3.55k|    std::size_t cur_lit;
  781|  3.55k|    std::size_t offset;
  782|       |
  783|  3.55k|    detail::const_stream_wrapper cs(p, end_);
  784|  3.55k|    BOOST_IF_CONSTEXPR( literal != detail::resume_literal )
  ------------------
  |  Branch (784:25): [Folded - Ignored]
  ------------------
  785|  3.55k|    {
  786|  3.55k|        BOOST_ASSERT( literal >= 0 );
  ------------------
  |  |   60|  3.55k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  787|  3.55k|        if(BOOST_JSON_LIKELY( cs.remain() >= literal_sizes[literal] ))
  ------------------
  |  |  171|  3.55k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 3.50k, False: 50]
  |  |  ------------------
  ------------------
  788|  3.50k|        {
  789|  3.50k|            int const cmp = std::memcmp(
  790|  3.50k|                cs.begin(), literals[literal], literal_sizes[literal] );
  791|  3.50k|            if( cmp != 0 )
  ------------------
  |  Branch (791:17): [True: 15, False: 3.48k]
  ------------------
  792|     15|            {
  793|     15|                BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     15|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  794|     15|                return fail(cs.begin(), error::syntax, &loc);
  795|     15|            }
  796|       |
  797|  3.48k|            BOOST_IF_CONSTEXPR( literal == detail::null_literal )
  ------------------
  |  Branch (797:33): [Folded - Ignored]
  ------------------
  798|  3.48k|            {
  799|  3.48k|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  3.48k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 3.48k]
  |  |  ------------------
  ------------------
  800|  3.48k|                    ! h_.on_null(ec_)))
  801|      0|                    return fail(cs.begin());
  802|  3.48k|            }
  803|      0|            else BOOST_IF_CONSTEXPR( literal == detail::true_literal )
  ------------------
  |  Branch (803:38): [Folded - Ignored]
  ------------------
  804|      0|            {
  805|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  806|      0|                    ! h_.on_bool(true, ec_)))
  807|      0|                    return fail(cs.begin());
  808|      0|            }
  809|      0|            else BOOST_IF_CONSTEXPR( literal == detail::false_literal )
  ------------------
  |  Branch (809:38): [Folded - Ignored]
  ------------------
  810|      0|            {
  811|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  812|      0|                    ! h_.on_bool(false, ec_)))
  813|      0|                    return fail(cs.begin());
  814|      0|            }
  815|      0|            else BOOST_IF_CONSTEXPR( literal == detail::infinity_literal )
  ------------------
  |  Branch (815:38): [Folded - Ignored]
  ------------------
  816|      0|            {
  817|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  818|      0|                    ! h_.on_double(
  819|      0|                        std::numeric_limits<double>::infinity(),
  820|      0|                        string_view(
  821|      0|                            literals[detail::infinity_literal],
  822|      0|                            literal_sizes[detail::infinity_literal]),
  823|      0|                        ec_)))
  824|      0|                    return fail(cs.begin());
  825|      0|            }
  826|      0|            else BOOST_IF_CONSTEXPR( literal == detail::neg_infinity_literal )
  ------------------
  |  Branch (826:38): [Folded - Ignored]
  ------------------
  827|      0|            {
  828|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  829|      0|                    ! h_.on_double(
  830|      0|                        -std::numeric_limits<double>::infinity(),
  831|      0|                        string_view(
  832|      0|                            literals[detail::neg_infinity_literal],
  833|      0|                            literal_sizes[detail::neg_infinity_literal]),
  834|      0|                        ec_)))
  835|      0|                    return fail(cs.begin());
  836|      0|            }
  837|      0|            else BOOST_IF_CONSTEXPR( literal == detail::nan_literal )
  ------------------
  |  Branch (837:38): [Folded - Ignored]
  ------------------
  838|      0|            {
  839|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  840|      0|                    ! h_.on_double(
  841|      0|                        std::numeric_limits<double>::quiet_NaN(),
  842|      0|                        string_view(
  843|      0|                            literals[detail::nan_literal],
  844|      0|                            literal_sizes[detail::nan_literal]),
  845|      0|                        ec_)))
  846|      0|                    return fail(cs.begin());
  847|      0|            }
  848|      0|            else
  849|      0|            {
  850|      0|                BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  851|      0|            }
  852|       |
  853|  3.48k|            cs += literal_sizes[literal];
  854|  3.48k|            return cs.begin();
  855|  3.48k|        }
  856|       |
  857|     50|        offset = 0;
  858|     50|        cur_lit = literal;
  859|     50|    }
  860|      0|    else
  861|      0|    {
  862|      0|        state st;
  863|      0|        st_.pop(st);
  864|      0|        BOOST_ASSERT( st == state::lit1 );
  ------------------
  |  |   60|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  865|       |
  866|      0|        cur_lit = cur_lit_;
  867|      0|        offset = lit_offset_;
  868|      0|    }
  869|       |
  870|     50|    std::size_t const size = (std::min)(
  871|     50|        literal_sizes[cur_lit] - offset, cs.remain() );
  872|     50|    int cmp = 0;
  873|     50|    if(BOOST_JSON_LIKELY( cs.begin() ))
  ------------------
  |  |  171|     50|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 50, False: 0]
  |  |  ------------------
  ------------------
  874|     50|        cmp = std::memcmp( cs.begin(), literals[cur_lit] + offset, size );
  875|     50|    if( cmp != 0 )
  ------------------
  |  Branch (875:9): [True: 41, False: 9]
  ------------------
  876|     41|    {
  877|     41|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     41|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  878|     41|        return fail(cs.begin(), error::syntax, &loc);
  879|     41|    }
  880|       |
  881|      9|    if(BOOST_JSON_UNLIKELY( offset + size < literal_sizes[cur_lit] ))
  ------------------
  |  |  179|      9|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  882|      9|    {
  883|      9|        BOOST_ASSERT( cur_lit < 256 );
  ------------------
  |  |   60|      9|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  884|      9|        cur_lit_ = static_cast<unsigned char>( cur_lit );
  885|      9|        BOOST_ASSERT( offset + size < 256 );
  ------------------
  |  |   60|      9|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  886|      9|        lit_offset_ = static_cast<unsigned char>( offset + size );
  887|      9|        return maybe_suspend(cs.begin() + size, state::lit1);
  888|      9|    }
  889|       |
  890|      0|    switch( cur_lit )
  891|      0|    {
  892|      0|    case detail::null_literal:
  ------------------
  |  Branch (892:5): [True: 0, False: 0]
  ------------------
  893|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  894|      0|            ! h_.on_null(ec_)))
  895|      0|            return fail(cs.begin());
  896|      0|        break;
  897|      0|    case detail::true_literal:
  ------------------
  |  Branch (897:5): [True: 0, False: 0]
  ------------------
  898|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  899|      0|            ! h_.on_bool(true, ec_)))
  900|      0|            return fail(cs.begin());
  901|      0|        break;
  902|      0|    case detail::false_literal:
  ------------------
  |  Branch (902:5): [True: 0, False: 0]
  ------------------
  903|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  904|      0|            ! h_.on_bool(false, ec_)))
  905|      0|            return fail(cs.begin());
  906|      0|        break;
  907|      0|    case detail::infinity_literal:
  ------------------
  |  Branch (907:5): [True: 0, False: 0]
  ------------------
  908|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  909|      0|            ! h_.on_double(
  910|      0|                std::numeric_limits<double>::infinity(),
  911|      0|                string_view(
  912|      0|                    literals[detail::infinity_literal],
  913|      0|                    literal_sizes[detail::infinity_literal]),
  914|      0|                ec_)))
  915|      0|            return fail(cs.begin());
  916|      0|        break;
  917|      0|    case detail::neg_infinity_literal:
  ------------------
  |  Branch (917:5): [True: 0, False: 0]
  ------------------
  918|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  919|      0|            ! h_.on_double(
  920|      0|                -std::numeric_limits<double>::infinity(),
  921|      0|                string_view(
  922|      0|                    literals[detail::neg_infinity_literal],
  923|      0|                    literal_sizes[detail::neg_infinity_literal]),
  924|      0|                ec_)))
  925|      0|            return fail(cs.begin());
  926|      0|        break;
  927|      0|    case detail::nan_literal:
  ------------------
  |  Branch (927:5): [True: 0, False: 0]
  ------------------
  928|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  929|      0|            ! h_.on_double(
  930|      0|                std::numeric_limits<double>::quiet_NaN(),
  931|      0|                string_view(
  932|      0|                    literals[detail::nan_literal],
  933|      0|                    literal_sizes[detail::nan_literal]),
  934|      0|                ec_)))
  935|      0|            return fail(cs.begin());
  936|      0|        break;
  937|      0|    default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (937:5): [True: 0, False: 0]
  ------------------
  938|      0|    }
  939|       |
  940|      0|    cs += size;
  941|      0|    return cs.begin();
  942|      0|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE13parse_literalILi1EEEPKcS7_NSt3__117integral_constantIiXT_EEE:
  761|  4.42k|{
  762|  4.42k|    constexpr char const* literals[] = {
  763|  4.42k|        "null",
  764|  4.42k|        "true",
  765|  4.42k|        "false",
  766|  4.42k|        "Infinity",
  767|  4.42k|        "-Infinity",
  768|  4.42k|        "NaN",
  769|  4.42k|    };
  770|       |
  771|  4.42k|    constexpr std::size_t literal_sizes[] = {
  772|  4.42k|        4,
  773|  4.42k|        4,
  774|  4.42k|        5,
  775|  4.42k|        8,
  776|  4.42k|        9,
  777|  4.42k|        3,
  778|  4.42k|    };
  779|       |
  780|  4.42k|    std::size_t cur_lit;
  781|  4.42k|    std::size_t offset;
  782|       |
  783|  4.42k|    detail::const_stream_wrapper cs(p, end_);
  784|  4.42k|    BOOST_IF_CONSTEXPR( literal != detail::resume_literal )
  ------------------
  |  Branch (784:25): [Folded - Ignored]
  ------------------
  785|  4.42k|    {
  786|  4.42k|        BOOST_ASSERT( literal >= 0 );
  ------------------
  |  |   60|  4.42k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  787|  4.42k|        if(BOOST_JSON_LIKELY( cs.remain() >= literal_sizes[literal] ))
  ------------------
  |  |  171|  4.42k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 4.38k, False: 47]
  |  |  ------------------
  ------------------
  788|  4.38k|        {
  789|  4.38k|            int const cmp = std::memcmp(
  790|  4.38k|                cs.begin(), literals[literal], literal_sizes[literal] );
  791|  4.38k|            if( cmp != 0 )
  ------------------
  |  Branch (791:17): [True: 29, False: 4.35k]
  ------------------
  792|     29|            {
  793|     29|                BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     29|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  794|     29|                return fail(cs.begin(), error::syntax, &loc);
  795|     29|            }
  796|       |
  797|  4.35k|            BOOST_IF_CONSTEXPR( literal == detail::null_literal )
  ------------------
  |  Branch (797:33): [Folded - Ignored]
  ------------------
  798|      0|            {
  799|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  800|      0|                    ! h_.on_null(ec_)))
  801|      0|                    return fail(cs.begin());
  802|      0|            }
  803|  4.35k|            else BOOST_IF_CONSTEXPR( literal == detail::true_literal )
  ------------------
  |  Branch (803:38): [Folded - Ignored]
  ------------------
  804|  4.35k|            {
  805|  4.35k|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  4.35k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 4.35k]
  |  |  ------------------
  ------------------
  806|  4.35k|                    ! h_.on_bool(true, ec_)))
  807|      0|                    return fail(cs.begin());
  808|  4.35k|            }
  809|      0|            else BOOST_IF_CONSTEXPR( literal == detail::false_literal )
  ------------------
  |  Branch (809:38): [Folded - Ignored]
  ------------------
  810|      0|            {
  811|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  812|      0|                    ! h_.on_bool(false, ec_)))
  813|      0|                    return fail(cs.begin());
  814|      0|            }
  815|      0|            else BOOST_IF_CONSTEXPR( literal == detail::infinity_literal )
  ------------------
  |  Branch (815:38): [Folded - Ignored]
  ------------------
  816|      0|            {
  817|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  818|      0|                    ! h_.on_double(
  819|      0|                        std::numeric_limits<double>::infinity(),
  820|      0|                        string_view(
  821|      0|                            literals[detail::infinity_literal],
  822|      0|                            literal_sizes[detail::infinity_literal]),
  823|      0|                        ec_)))
  824|      0|                    return fail(cs.begin());
  825|      0|            }
  826|      0|            else BOOST_IF_CONSTEXPR( literal == detail::neg_infinity_literal )
  ------------------
  |  Branch (826:38): [Folded - Ignored]
  ------------------
  827|      0|            {
  828|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  829|      0|                    ! h_.on_double(
  830|      0|                        -std::numeric_limits<double>::infinity(),
  831|      0|                        string_view(
  832|      0|                            literals[detail::neg_infinity_literal],
  833|      0|                            literal_sizes[detail::neg_infinity_literal]),
  834|      0|                        ec_)))
  835|      0|                    return fail(cs.begin());
  836|      0|            }
  837|      0|            else BOOST_IF_CONSTEXPR( literal == detail::nan_literal )
  ------------------
  |  Branch (837:38): [Folded - Ignored]
  ------------------
  838|      0|            {
  839|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  840|      0|                    ! h_.on_double(
  841|      0|                        std::numeric_limits<double>::quiet_NaN(),
  842|      0|                        string_view(
  843|      0|                            literals[detail::nan_literal],
  844|      0|                            literal_sizes[detail::nan_literal]),
  845|      0|                        ec_)))
  846|      0|                    return fail(cs.begin());
  847|      0|            }
  848|      0|            else
  849|      0|            {
  850|      0|                BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  851|      0|            }
  852|       |
  853|  4.35k|            cs += literal_sizes[literal];
  854|  4.35k|            return cs.begin();
  855|  4.35k|        }
  856|       |
  857|     47|        offset = 0;
  858|     47|        cur_lit = literal;
  859|     47|    }
  860|      0|    else
  861|      0|    {
  862|      0|        state st;
  863|      0|        st_.pop(st);
  864|      0|        BOOST_ASSERT( st == state::lit1 );
  ------------------
  |  |   60|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  865|       |
  866|      0|        cur_lit = cur_lit_;
  867|      0|        offset = lit_offset_;
  868|      0|    }
  869|       |
  870|     47|    std::size_t const size = (std::min)(
  871|     47|        literal_sizes[cur_lit] - offset, cs.remain() );
  872|     47|    int cmp = 0;
  873|     47|    if(BOOST_JSON_LIKELY( cs.begin() ))
  ------------------
  |  |  171|     47|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 47, False: 0]
  |  |  ------------------
  ------------------
  874|     47|        cmp = std::memcmp( cs.begin(), literals[cur_lit] + offset, size );
  875|     47|    if( cmp != 0 )
  ------------------
  |  Branch (875:9): [True: 39, False: 8]
  ------------------
  876|     39|    {
  877|     39|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     39|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  878|     39|        return fail(cs.begin(), error::syntax, &loc);
  879|     39|    }
  880|       |
  881|      8|    if(BOOST_JSON_UNLIKELY( offset + size < literal_sizes[cur_lit] ))
  ------------------
  |  |  179|      8|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 8, False: 0]
  |  |  ------------------
  ------------------
  882|      8|    {
  883|      8|        BOOST_ASSERT( cur_lit < 256 );
  ------------------
  |  |   60|      8|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  884|      8|        cur_lit_ = static_cast<unsigned char>( cur_lit );
  885|      8|        BOOST_ASSERT( offset + size < 256 );
  ------------------
  |  |   60|      8|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  886|      8|        lit_offset_ = static_cast<unsigned char>( offset + size );
  887|      8|        return maybe_suspend(cs.begin() + size, state::lit1);
  888|      8|    }
  889|       |
  890|      0|    switch( cur_lit )
  891|      0|    {
  892|      0|    case detail::null_literal:
  ------------------
  |  Branch (892:5): [True: 0, False: 0]
  ------------------
  893|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  894|      0|            ! h_.on_null(ec_)))
  895|      0|            return fail(cs.begin());
  896|      0|        break;
  897|      0|    case detail::true_literal:
  ------------------
  |  Branch (897:5): [True: 0, False: 0]
  ------------------
  898|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  899|      0|            ! h_.on_bool(true, ec_)))
  900|      0|            return fail(cs.begin());
  901|      0|        break;
  902|      0|    case detail::false_literal:
  ------------------
  |  Branch (902:5): [True: 0, False: 0]
  ------------------
  903|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  904|      0|            ! h_.on_bool(false, ec_)))
  905|      0|            return fail(cs.begin());
  906|      0|        break;
  907|      0|    case detail::infinity_literal:
  ------------------
  |  Branch (907:5): [True: 0, False: 0]
  ------------------
  908|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  909|      0|            ! h_.on_double(
  910|      0|                std::numeric_limits<double>::infinity(),
  911|      0|                string_view(
  912|      0|                    literals[detail::infinity_literal],
  913|      0|                    literal_sizes[detail::infinity_literal]),
  914|      0|                ec_)))
  915|      0|            return fail(cs.begin());
  916|      0|        break;
  917|      0|    case detail::neg_infinity_literal:
  ------------------
  |  Branch (917:5): [True: 0, False: 0]
  ------------------
  918|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  919|      0|            ! h_.on_double(
  920|      0|                -std::numeric_limits<double>::infinity(),
  921|      0|                string_view(
  922|      0|                    literals[detail::neg_infinity_literal],
  923|      0|                    literal_sizes[detail::neg_infinity_literal]),
  924|      0|                ec_)))
  925|      0|            return fail(cs.begin());
  926|      0|        break;
  927|      0|    case detail::nan_literal:
  ------------------
  |  Branch (927:5): [True: 0, False: 0]
  ------------------
  928|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  929|      0|            ! h_.on_double(
  930|      0|                std::numeric_limits<double>::quiet_NaN(),
  931|      0|                string_view(
  932|      0|                    literals[detail::nan_literal],
  933|      0|                    literal_sizes[detail::nan_literal]),
  934|      0|                ec_)))
  935|      0|            return fail(cs.begin());
  936|      0|        break;
  937|      0|    default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (937:5): [True: 0, False: 0]
  ------------------
  938|      0|    }
  939|       |
  940|      0|    cs += size;
  941|      0|    return cs.begin();
  942|      0|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE13parse_literalILi2EEEPKcS7_NSt3__117integral_constantIiXT_EEE:
  761|    367|{
  762|    367|    constexpr char const* literals[] = {
  763|    367|        "null",
  764|    367|        "true",
  765|    367|        "false",
  766|    367|        "Infinity",
  767|    367|        "-Infinity",
  768|    367|        "NaN",
  769|    367|    };
  770|       |
  771|    367|    constexpr std::size_t literal_sizes[] = {
  772|    367|        4,
  773|    367|        4,
  774|    367|        5,
  775|    367|        8,
  776|    367|        9,
  777|    367|        3,
  778|    367|    };
  779|       |
  780|    367|    std::size_t cur_lit;
  781|    367|    std::size_t offset;
  782|       |
  783|    367|    detail::const_stream_wrapper cs(p, end_);
  784|    367|    BOOST_IF_CONSTEXPR( literal != detail::resume_literal )
  ------------------
  |  Branch (784:25): [Folded - Ignored]
  ------------------
  785|    367|    {
  786|    367|        BOOST_ASSERT( literal >= 0 );
  ------------------
  |  |   60|    367|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  787|    367|        if(BOOST_JSON_LIKELY( cs.remain() >= literal_sizes[literal] ))
  ------------------
  |  |  171|    367|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 311, False: 56]
  |  |  ------------------
  ------------------
  788|    311|        {
  789|    311|            int const cmp = std::memcmp(
  790|    311|                cs.begin(), literals[literal], literal_sizes[literal] );
  791|    311|            if( cmp != 0 )
  ------------------
  |  Branch (791:17): [True: 22, False: 289]
  ------------------
  792|     22|            {
  793|     22|                BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     22|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  794|     22|                return fail(cs.begin(), error::syntax, &loc);
  795|     22|            }
  796|       |
  797|    289|            BOOST_IF_CONSTEXPR( literal == detail::null_literal )
  ------------------
  |  Branch (797:33): [Folded - Ignored]
  ------------------
  798|      0|            {
  799|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  800|      0|                    ! h_.on_null(ec_)))
  801|      0|                    return fail(cs.begin());
  802|      0|            }
  803|    289|            else BOOST_IF_CONSTEXPR( literal == detail::true_literal )
  ------------------
  |  Branch (803:38): [Folded - Ignored]
  ------------------
  804|      0|            {
  805|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  806|      0|                    ! h_.on_bool(true, ec_)))
  807|      0|                    return fail(cs.begin());
  808|      0|            }
  809|    289|            else BOOST_IF_CONSTEXPR( literal == detail::false_literal )
  ------------------
  |  Branch (809:38): [Folded - Ignored]
  ------------------
  810|    289|            {
  811|    289|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|    289|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 289]
  |  |  ------------------
  ------------------
  812|    289|                    ! h_.on_bool(false, ec_)))
  813|      0|                    return fail(cs.begin());
  814|    289|            }
  815|      0|            else BOOST_IF_CONSTEXPR( literal == detail::infinity_literal )
  ------------------
  |  Branch (815:38): [Folded - Ignored]
  ------------------
  816|      0|            {
  817|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  818|      0|                    ! h_.on_double(
  819|      0|                        std::numeric_limits<double>::infinity(),
  820|      0|                        string_view(
  821|      0|                            literals[detail::infinity_literal],
  822|      0|                            literal_sizes[detail::infinity_literal]),
  823|      0|                        ec_)))
  824|      0|                    return fail(cs.begin());
  825|      0|            }
  826|      0|            else BOOST_IF_CONSTEXPR( literal == detail::neg_infinity_literal )
  ------------------
  |  Branch (826:38): [Folded - Ignored]
  ------------------
  827|      0|            {
  828|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  829|      0|                    ! h_.on_double(
  830|      0|                        -std::numeric_limits<double>::infinity(),
  831|      0|                        string_view(
  832|      0|                            literals[detail::neg_infinity_literal],
  833|      0|                            literal_sizes[detail::neg_infinity_literal]),
  834|      0|                        ec_)))
  835|      0|                    return fail(cs.begin());
  836|      0|            }
  837|      0|            else BOOST_IF_CONSTEXPR( literal == detail::nan_literal )
  ------------------
  |  Branch (837:38): [Folded - Ignored]
  ------------------
  838|      0|            {
  839|      0|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  840|      0|                    ! h_.on_double(
  841|      0|                        std::numeric_limits<double>::quiet_NaN(),
  842|      0|                        string_view(
  843|      0|                            literals[detail::nan_literal],
  844|      0|                            literal_sizes[detail::nan_literal]),
  845|      0|                        ec_)))
  846|      0|                    return fail(cs.begin());
  847|      0|            }
  848|      0|            else
  849|      0|            {
  850|      0|                BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  851|      0|            }
  852|       |
  853|    289|            cs += literal_sizes[literal];
  854|    289|            return cs.begin();
  855|    289|        }
  856|       |
  857|     56|        offset = 0;
  858|     56|        cur_lit = literal;
  859|     56|    }
  860|      0|    else
  861|      0|    {
  862|      0|        state st;
  863|      0|        st_.pop(st);
  864|      0|        BOOST_ASSERT( st == state::lit1 );
  ------------------
  |  |   60|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  865|       |
  866|      0|        cur_lit = cur_lit_;
  867|      0|        offset = lit_offset_;
  868|      0|    }
  869|       |
  870|     56|    std::size_t const size = (std::min)(
  871|     56|        literal_sizes[cur_lit] - offset, cs.remain() );
  872|     56|    int cmp = 0;
  873|     56|    if(BOOST_JSON_LIKELY( cs.begin() ))
  ------------------
  |  |  171|     56|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 56, False: 0]
  |  |  ------------------
  ------------------
  874|     56|        cmp = std::memcmp( cs.begin(), literals[cur_lit] + offset, size );
  875|     56|    if( cmp != 0 )
  ------------------
  |  Branch (875:9): [True: 44, False: 12]
  ------------------
  876|     44|    {
  877|     44|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     44|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  878|     44|        return fail(cs.begin(), error::syntax, &loc);
  879|     44|    }
  880|       |
  881|     12|    if(BOOST_JSON_UNLIKELY( offset + size < literal_sizes[cur_lit] ))
  ------------------
  |  |  179|     12|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  882|     12|    {
  883|     12|        BOOST_ASSERT( cur_lit < 256 );
  ------------------
  |  |   60|     12|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  884|     12|        cur_lit_ = static_cast<unsigned char>( cur_lit );
  885|     12|        BOOST_ASSERT( offset + size < 256 );
  ------------------
  |  |   60|     12|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  886|     12|        lit_offset_ = static_cast<unsigned char>( offset + size );
  887|     12|        return maybe_suspend(cs.begin() + size, state::lit1);
  888|     12|    }
  889|       |
  890|      0|    switch( cur_lit )
  891|      0|    {
  892|      0|    case detail::null_literal:
  ------------------
  |  Branch (892:5): [True: 0, False: 0]
  ------------------
  893|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  894|      0|            ! h_.on_null(ec_)))
  895|      0|            return fail(cs.begin());
  896|      0|        break;
  897|      0|    case detail::true_literal:
  ------------------
  |  Branch (897:5): [True: 0, False: 0]
  ------------------
  898|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  899|      0|            ! h_.on_bool(true, ec_)))
  900|      0|            return fail(cs.begin());
  901|      0|        break;
  902|      0|    case detail::false_literal:
  ------------------
  |  Branch (902:5): [True: 0, False: 0]
  ------------------
  903|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  904|      0|            ! h_.on_bool(false, ec_)))
  905|      0|            return fail(cs.begin());
  906|      0|        break;
  907|      0|    case detail::infinity_literal:
  ------------------
  |  Branch (907:5): [True: 0, False: 0]
  ------------------
  908|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  909|      0|            ! h_.on_double(
  910|      0|                std::numeric_limits<double>::infinity(),
  911|      0|                string_view(
  912|      0|                    literals[detail::infinity_literal],
  913|      0|                    literal_sizes[detail::infinity_literal]),
  914|      0|                ec_)))
  915|      0|            return fail(cs.begin());
  916|      0|        break;
  917|      0|    case detail::neg_infinity_literal:
  ------------------
  |  Branch (917:5): [True: 0, False: 0]
  ------------------
  918|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  919|      0|            ! h_.on_double(
  920|      0|                -std::numeric_limits<double>::infinity(),
  921|      0|                string_view(
  922|      0|                    literals[detail::neg_infinity_literal],
  923|      0|                    literal_sizes[detail::neg_infinity_literal]),
  924|      0|                ec_)))
  925|      0|            return fail(cs.begin());
  926|      0|        break;
  927|      0|    case detail::nan_literal:
  ------------------
  |  Branch (927:5): [True: 0, False: 0]
  ------------------
  928|      0|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  929|      0|            ! h_.on_double(
  930|      0|                std::numeric_limits<double>::quiet_NaN(),
  931|      0|                string_view(
  932|      0|                    literals[detail::nan_literal],
  933|      0|                    literal_sizes[detail::nan_literal]),
  934|      0|                ec_)))
  935|      0|            return fail(cs.begin());
  936|      0|        break;
  937|      0|    default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (937:5): [True: 0, False: 0]
  ------------------
  938|      0|    }
  939|       |
  940|      0|    cs += size;
  941|      0|    return cs.begin();
  942|      0|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE4failEPKcNS0_5errorEPKNS_15source_locationE:
  304|  2.33k|{
  305|  2.33k|    end_ = p;
  306|  2.33k|    ec_.assign(ev, loc);
  307|  2.33k|    return sentinel();
  308|  2.33k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE15parse_unescapedILb1ELb0EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IbXT0_EEEb:
  993|  32.2k|{
  994|  32.2k|    detail::const_stream_wrapper cs(p, end_);
  995|  32.2k|    std::size_t total;
  996|  32.2k|    if(stack_empty || st_.empty())
  ------------------
  |  Branch (996:8): [Folded - Ignored]
  |  Branch (996:23): [True: 0, False: 0]
  ------------------
  997|  32.2k|    {
  998|  32.2k|        BOOST_ASSERT(*cs == '\x22'); // '"'
  ------------------
  |  |   60|  32.2k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  999|  32.2k|        ++cs;
 1000|  32.2k|        total = 0;
 1001|  32.2k|    }
 1002|      0|    else
 1003|      0|    {
 1004|      0|        state st;
 1005|      0|        st_.pop(st);
 1006|      0|        st_.pop(total);
 1007|      0|    }
 1008|  32.2k|    char const* start = cs.begin();
 1009|  32.2k|    cs = allow_bad_utf8?
  ------------------
  |  Branch (1009:10): [True: 0, False: 32.2k]
  ------------------
 1010|      0|        detail::count_valid<true>(cs.begin(), cs.end()):
 1011|  32.2k|        detail::count_valid<false>(cs.begin(), cs.end());
 1012|  32.2k|    std::size_t size = cs.used(start);
 1013|  32.2k|    if(is_key)
  ------------------
  |  Branch (1013:8): [Folded - Ignored]
  ------------------
 1014|      0|    {
 1015|      0|        BOOST_ASSERT(total <= Handler::max_key_size);
  ------------------
  |  |   60|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1016|      0|        if(BOOST_JSON_UNLIKELY(size >
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1017|      0|            Handler::max_key_size - total))
 1018|      0|        {
 1019|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 1020|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1021|      0|            return fail(cs.begin(), error::key_too_large, &loc);
 1022|      0|        }
 1023|      0|    }
 1024|  32.2k|    else
 1025|  32.2k|    {
 1026|  32.2k|        BOOST_ASSERT(total <= Handler::max_string_size);
  ------------------
  |  |   60|  32.2k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1027|  32.2k|        if(BOOST_JSON_UNLIKELY(size >
  ------------------
  |  |  179|  32.2k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 32.2k]
  |  |  ------------------
  ------------------
 1028|  32.2k|            Handler::max_string_size - total))
 1029|      0|        {
 1030|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 1031|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1032|      0|            return fail(cs.begin(), error::string_too_large, &loc);
 1033|      0|        }
 1034|  32.2k|    }
 1035|  32.2k|    total += size;
 1036|  32.2k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  32.2k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 143, False: 32.0k]
  |  |  ------------------
  ------------------
 1037|    143|    {
 1038|       |        // call handler if the string isn't empty
 1039|    143|        if(BOOST_JSON_LIKELY(size))
  ------------------
  |  |  171|    143|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 131, False: 12]
  |  |  ------------------
  ------------------
 1040|    131|        {
 1041|    131|            {
 1042|    131|                bool r = is_key?
  ------------------
  |  Branch (1042:26): [Folded - Ignored]
  ------------------
 1043|      0|                    h_.on_key_part( {start, size}, total, ec_ ):
 1044|    131|                    h_.on_string_part( {start, size}, total, ec_ );
 1045|       |
 1046|    131|                if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|    131|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 131]
  |  |  ------------------
  ------------------
 1047|      0|                {
 1048|      0|                    return fail(cs.begin());
 1049|      0|                }
 1050|    131|            }
 1051|    131|        }
 1052|    143|        return maybe_suspend(cs.begin(), state::str1, total);
 1053|    143|    }
 1054|       |    // at this point all valid characters have been skipped, so any remaining
 1055|       |    // if there are any more characters, they are either escaped, or incomplete
 1056|       |    // utf8, or invalid utf8
 1057|  32.0k|    if(BOOST_JSON_UNLIKELY(*cs != '\x22')) // '"'
  ------------------
  |  |  179|  32.0k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 13.4k, False: 18.6k]
  |  |  ------------------
  ------------------
 1058|  13.4k|    {
 1059|       |        // sequence is invalid or incomplete
 1060|  13.4k|        if((*cs & 0x80) && !allow_bad_utf8)
  ------------------
  |  Branch (1060:12): [True: 153, False: 13.2k]
  |  Branch (1060:28): [True: 153, False: 0]
  ------------------
 1061|    153|        {
 1062|    153|            seq_.save(cs.begin(), cs.remain());
 1063|    153|            if(BOOST_JSON_UNLIKELY(seq_.complete()))
  ------------------
  |  |  179|    153|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 124, False: 29]
  |  |  ------------------
  ------------------
 1064|    124|            {
 1065|    124|                BOOST_STATIC_CONSTEXPR source_location loc
 1066|    124|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|    124|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1067|    124|                return fail(cs.begin(), error::syntax, &loc);
 1068|    124|            }
 1069|     29|            if(BOOST_JSON_LIKELY(size))
  ------------------
  |  |  171|     29|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 16, False: 13]
  |  |  ------------------
  ------------------
 1070|     16|            {
 1071|     16|                {
 1072|     16|                    bool r = is_key?
  ------------------
  |  Branch (1072:30): [Folded - Ignored]
  ------------------
 1073|      0|                        h_.on_key_part( {start, size}, total, ec_ ):
 1074|     16|                        h_.on_string_part( {start, size}, total, ec_ );
 1075|       |
 1076|     16|                    if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|     16|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 16]
  |  |  ------------------
  ------------------
 1077|      0|                    {
 1078|      0|                        return fail(cs.begin());
 1079|      0|                    }
 1080|     16|                }
 1081|     16|            }
 1082|     29|            return maybe_suspend(cs.end(), state::str8, total);
 1083|     29|        }
 1084|  13.2k|        else if(BOOST_JSON_LIKELY(*cs == '\\'))
  ------------------
  |  |  171|  13.2k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 13.2k, False: 14]
  |  |  ------------------
  ------------------
 1085|  13.2k|        {
 1086|       |            // flush unescaped run from input
 1087|  13.2k|            if(BOOST_JSON_LIKELY(size))
  ------------------
  |  |  171|  13.2k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 10.2k, False: 2.98k]
  |  |  ------------------
  ------------------
 1088|  10.2k|            {
 1089|  10.2k|                {
 1090|  10.2k|                    bool r = is_key?
  ------------------
  |  Branch (1090:30): [Folded - Ignored]
  ------------------
 1091|      0|                        h_.on_key_part( {start, size}, total, ec_ ):
 1092|  10.2k|                        h_.on_string_part( {start, size}, total, ec_ );
 1093|       |
 1094|  10.2k|                    if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  10.2k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 10.2k]
  |  |  ------------------
  ------------------
 1095|      0|                    {
 1096|      0|                        return fail(cs.begin());
 1097|      0|                    }
 1098|  10.2k|                }
 1099|  10.2k|            }
 1100|  13.2k|            return parse_escaped(cs.begin(), total, stack_empty, is_key, allow_bad_utf8);
 1101|  13.2k|        }
 1102|       |        // illegal control
 1103|     14|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     14|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1104|     14|        return fail(cs.begin(), error::syntax, &loc);
 1105|  13.4k|    }
 1106|       |
 1107|  18.6k|    {
 1108|  18.6k|        bool r = is_key?
  ------------------
  |  Branch (1108:18): [Folded - Ignored]
  ------------------
 1109|      0|            h_.on_key( {start, size}, total, ec_ ):
 1110|  18.6k|            h_.on_string( {start, size}, total, ec_ );
 1111|       |
 1112|  18.6k|        if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  18.6k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 18.6k]
  |  |  ------------------
  ------------------
 1113|      0|        {
 1114|      0|            return fail(cs.begin());
 1115|      0|        }
 1116|  18.6k|    }
 1117|       |
 1118|  18.6k|    ++cs;
 1119|  18.6k|    return cs.begin();
 1120|  18.6k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE13maybe_suspendEPKcNS4_5stateEm:
  334|  1.75k|{
  335|  1.75k|    end_ = p;
  336|  1.75k|    if(BOOST_JSON_LIKELY(more_))
  ------------------
  |  |  171|  1.75k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 1.75k]
  |  |  ------------------
  ------------------
  337|      0|    {
  338|       |        // suspend
  339|      0|        reserve();
  340|      0|        st_.push_unchecked(n);
  341|      0|        st_.push_unchecked(st);
  342|      0|    }
  343|  1.75k|    return sentinel();
  344|  1.75k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE13parse_escapedILb1EEEPKcS7_mNSt3__117integral_constantIbXT_EEEbb:
 1135|  15.6k|{
 1136|       |    //---------------------------------------------------------------
 1137|       |    //
 1138|       |    // To handle escapes, a local temporary buffer accumulates
 1139|       |    // the unescaped result. The algorithm attempts to fill the
 1140|       |    // buffer to capacity before invoking the handler.
 1141|       |    // In some cases the temporary buffer needs to be flushed
 1142|       |    // before it is full:
 1143|       |    // * When the closing double quote is seen
 1144|       |    // * When there in no more input (and more is expected later)
 1145|       |    // A goal of the algorithm is to call the handler as few times
 1146|       |    // as possible. Thus, when the first escape is encountered,
 1147|       |    // the algorithm attempts to fill the temporary buffer first.
 1148|       |    //
 1149|  15.6k|    auto const ev_too_large = is_key?
  ------------------
  |  Branch (1149:31): [True: 2.40k, False: 13.2k]
  ------------------
 1150|  13.2k|        error::key_too_large : error::string_too_large;
 1151|  15.6k|    auto const max_size = is_key?
  ------------------
  |  Branch (1151:27): [True: 2.40k, False: 13.2k]
  ------------------
 1152|  13.2k|        Handler::max_key_size : Handler::max_string_size;
 1153|  15.6k|    detail::clipped_const_stream cs(p, end_);
 1154|  15.6k|    detail::buffer<BOOST_JSON_STACK_BUFFER_SIZE> temp;
 1155|  15.6k|    int digit;
 1156|  15.6k|    char c;
 1157|  15.6k|    cs.clip(temp.max_size());
 1158|  15.6k|    if(! stack_empty && ! st_.empty())
  ------------------
  |  Branch (1158:8): [Folded - Ignored]
  |  Branch (1158:25): [True: 0, False: 0]
  ------------------
 1159|      0|    {
 1160|      0|        state st;
 1161|      0|        st_.pop(st);
 1162|      0|        st_.pop(total);
 1163|      0|        switch(st)
 1164|      0|        {
 1165|      0|        default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (1165:9): [True: 0, False: 0]
  ------------------
 1166|      0|        case state::str2: goto do_str2;
  ------------------
  |  Branch (1166:9): [True: 0, False: 0]
  ------------------
 1167|      0|        case state::str3: goto do_str3;
  ------------------
  |  Branch (1167:9): [True: 0, False: 0]
  ------------------
 1168|      0|        case state::str4: goto do_str4;
  ------------------
  |  Branch (1168:9): [True: 0, False: 0]
  ------------------
 1169|      0|        case state::str5: goto do_str5;
  ------------------
  |  Branch (1169:9): [True: 0, False: 0]
  ------------------
 1170|      0|        case state::str6: goto do_str6;
  ------------------
  |  Branch (1170:9): [True: 0, False: 0]
  ------------------
 1171|      0|        case state::str7: goto do_str7;
  ------------------
  |  Branch (1171:9): [True: 0, False: 0]
  ------------------
 1172|      0|        case state::str8: goto do_str8;
  ------------------
  |  Branch (1172:9): [True: 0, False: 0]
  ------------------
 1173|      0|        case state::sur1: goto do_sur1;
  ------------------
  |  Branch (1173:9): [True: 0, False: 0]
  ------------------
 1174|      0|        case state::sur2: goto do_sur2;
  ------------------
  |  Branch (1174:9): [True: 0, False: 0]
  ------------------
 1175|      0|        case state::sur3: goto do_sur3;
  ------------------
  |  Branch (1175:9): [True: 0, False: 0]
  ------------------
 1176|      0|        case state::sur4: goto do_sur4;
  ------------------
  |  Branch (1176:9): [True: 0, False: 0]
  ------------------
 1177|      0|        case state::sur5: goto do_sur5;
  ------------------
  |  Branch (1177:9): [True: 0, False: 0]
  ------------------
 1178|      0|        case state::sur6: goto do_sur6;
  ------------------
  |  Branch (1178:9): [True: 0, False: 0]
  ------------------
 1179|      0|        }
 1180|      0|    }
 1181|       |    // Unescaped JSON is never larger than its escaped version.
 1182|       |    // To efficiently process only what will fit in the temporary buffer,
 1183|       |    // the size of the input stream is temporarily "clipped" to the size
 1184|       |    // of the temporary buffer.
 1185|       |    // handle escaped character
 1186|  15.6k|    BOOST_ASSERT(*cs == '\\');
  ------------------
  |  |   60|  15.6k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1187|  15.6k|    ++cs;
 1188|  4.38M|do_str3:
 1189|  4.38M|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  4.38M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1.06k, False: 4.38M]
  |  |  ------------------
  ------------------
 1190|  1.06k|    {
 1191|  1.06k|        if(BOOST_JSON_LIKELY(! temp.empty()))
  ------------------
  |  |  171|  1.06k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.01k, False: 46]
  |  |  ------------------
  ------------------
 1192|  1.01k|        {
 1193|  1.01k|            BOOST_ASSERT(total <= max_size);
  ------------------
  |  |   60|  1.01k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1194|  1.01k|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  1.01k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.01k]
  |  |  ------------------
  ------------------
 1195|  1.01k|                temp.size() > max_size - total))
 1196|      0|            {
 1197|      0|                BOOST_STATIC_CONSTEXPR source_location loc
 1198|      0|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1199|      0|                return fail(cs.begin(), ev_too_large, &loc);
 1200|      0|            }
 1201|  1.01k|            total += temp.size();
 1202|  1.01k|            {
 1203|  1.01k|                bool r = is_key
  ------------------
  |  Branch (1203:26): [True: 219, False: 795]
  ------------------
 1204|  1.01k|                    ? h_.on_key_part(temp.get(), total, ec_)
 1205|  1.01k|                    : h_.on_string_part(temp.get(), total, ec_);
 1206|       |
 1207|  1.01k|                if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  1.01k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.01k]
  |  |  ------------------
  ------------------
 1208|      0|                {
 1209|      0|                    return fail(cs.begin());
 1210|      0|                }
 1211|  1.01k|            }
 1212|  1.01k|            temp.clear();
 1213|  1.01k|        }
 1214|  1.06k|        cs.clip(temp.max_size());
 1215|  1.06k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.06k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 94, False: 966]
  |  |  ------------------
  ------------------
 1216|     94|            return maybe_suspend(cs.begin(), state::str3, total);
 1217|  1.06k|    }
 1218|  4.38M|    switch(*cs)
 1219|  4.38M|    {
 1220|     33|    default:
  ------------------
  |  Branch (1220:5): [True: 33, False: 4.38M]
  ------------------
 1221|     33|        {
 1222|     33|            BOOST_STATIC_CONSTEXPR source_location loc
 1223|     33|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     33|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1224|     33|            return fail(cs.begin(), error::syntax, &loc);
 1225|      0|        }
 1226|  3.95k|    case '\x22': // '"'
  ------------------
  |  Branch (1226:5): [True: 3.95k, False: 4.37M]
  ------------------
 1227|  3.95k|        temp.push_back('\x22');
 1228|  3.95k|        ++cs;
 1229|  3.95k|        break;
 1230|  3.23M|    case '\\':
  ------------------
  |  Branch (1230:5): [True: 3.23M, False: 1.15M]
  ------------------
 1231|  3.23M|        temp.push_back('\\');
 1232|  3.23M|        ++cs;
 1233|  3.23M|        break;
 1234|    251|    case '/':
  ------------------
  |  Branch (1234:5): [True: 251, False: 4.38M]
  ------------------
 1235|    251|        temp.push_back('/');
 1236|    251|        ++cs;
 1237|    251|        break;
 1238|  4.05k|    case 'b':
  ------------------
  |  Branch (1238:5): [True: 4.05k, False: 4.37M]
  ------------------
 1239|  4.05k|        temp.push_back('\x08');
 1240|  4.05k|        ++cs;
 1241|  4.05k|        break;
 1242|  19.9k|    case 'f':
  ------------------
  |  Branch (1242:5): [True: 19.9k, False: 4.36M]
  ------------------
 1243|  19.9k|        temp.push_back('\x0c');
 1244|  19.9k|        ++cs;
 1245|  19.9k|        break;
 1246|  12.4k|    case 'n':
  ------------------
  |  Branch (1246:5): [True: 12.4k, False: 4.37M]
  ------------------
 1247|  12.4k|        temp.push_back('\x0a');
 1248|  12.4k|        ++cs;
 1249|  12.4k|        break;
 1250|    557|    case 'r':
  ------------------
  |  Branch (1250:5): [True: 557, False: 4.38M]
  ------------------
 1251|    557|        temp.push_back('\x0d');
 1252|    557|        ++cs;
 1253|    557|        break;
 1254|  1.07k|    case 't':
  ------------------
  |  Branch (1254:5): [True: 1.07k, False: 4.38M]
  ------------------
 1255|  1.07k|        temp.push_back('\x09');
 1256|  1.07k|        ++cs;
 1257|  1.07k|        break;
 1258|  1.10M|    case 'u':
  ------------------
  |  Branch (1258:5): [True: 1.10M, False: 3.27M]
  ------------------
 1259|       |        // utf16 escape
 1260|       |        //
 1261|       |        // fast path only when the buffer
 1262|       |        // is large enough for 2 surrogates
 1263|  1.10M|        if(BOOST_JSON_LIKELY(cs.remain() > 10))
  ------------------
  |  |  171|  1.10M|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.10M, False: 2.96k]
  |  |  ------------------
  ------------------
 1264|  1.10M|        {
 1265|       |            // KRYSTIAN TODO: this could be done
 1266|       |            // with fewer instructions
 1267|  1.10M|            digit = detail::load_little_endian<4>(
 1268|  1.10M|                cs.begin() + 1);
 1269|  1.10M|            int d4 = detail::hex_digit(static_cast<
 1270|  1.10M|                unsigned char>(digit >> 24));
 1271|  1.10M|            int d3 = detail::hex_digit(static_cast<
 1272|  1.10M|                unsigned char>(digit >> 16));
 1273|  1.10M|            int d2 = detail::hex_digit(static_cast<
 1274|  1.10M|                unsigned char>(digit >> 8));
 1275|  1.10M|            int d1 = detail::hex_digit(static_cast<
 1276|  1.10M|                unsigned char>(digit));
 1277|  1.10M|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  1.10M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 66, False: 1.10M]
  |  |  ------------------
  ------------------
 1278|  1.10M|                (d1 | d2 | d3 | d4) == -1))
 1279|     66|            {
 1280|     66|                if(d1 != -1)
  ------------------
  |  Branch (1280:20): [True: 38, False: 28]
  ------------------
 1281|     38|                    ++cs;
 1282|     66|                if(d2 != -1)
  ------------------
  |  Branch (1282:20): [True: 29, False: 37]
  ------------------
 1283|     29|                    ++cs;
 1284|     66|                if(d3 != -1)
  ------------------
  |  Branch (1284:20): [True: 25, False: 41]
  ------------------
 1285|     25|                    ++cs;
 1286|     66|                BOOST_STATIC_CONSTEXPR source_location loc
 1287|     66|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     66|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1288|     66|                return fail(cs.begin(), error::expected_hex_digit, &loc);
 1289|     66|            }
 1290|       |            // 32 bit unicode scalar value
 1291|  1.10M|            unsigned const u1 =
 1292|  1.10M|                (d1 << 12) + (d2 << 8) +
 1293|  1.10M|                (d3 << 4) + d4;
 1294|       |            // valid unicode scalar values are
 1295|       |            // [0, D7FF] and [E000, 10FFFF]
 1296|       |            // values within this range are valid utf-8
 1297|       |            // code points and invalid leading surrogates.
 1298|  1.10M|            if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  1.46M|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 954k, False: 151k]
  |  |  |  Branch (171:52): [True: 746k, False: 359k]
  |  |  |  Branch (171:52): [True: 208k, False: 151k]
  |  |  ------------------
  ------------------
 1299|  1.10M|                u1 < 0xd800 || u1 > 0xdfff))
 1300|   954k|            {
 1301|   954k|                cs += 5;
 1302|   954k|                temp.append_utf8(u1);
 1303|   954k|                break;
 1304|   954k|            }
 1305|   151k|            if(BOOST_JSON_UNLIKELY(u1 > 0xdbff))
  ------------------
  |  |  179|   151k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 10, False: 151k]
  |  |  ------------------
  ------------------
 1306|     10|            {
 1307|     10|                BOOST_STATIC_CONSTEXPR source_location loc
 1308|     10|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     10|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1309|     10|                return fail(cs.begin(), error::illegal_leading_surrogate,
 1310|     10|                    &loc);
 1311|     10|            }
 1312|   151k|            cs += 5;
 1313|       |            // KRYSTIAN TODO: this can be a two byte load
 1314|       |            // and a single comparison. We lose error information,
 1315|       |            // but it's faster.
 1316|   151k|            if(BOOST_JSON_UNLIKELY(*cs != '\\'))
  ------------------
  |  |  179|   151k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 2, False: 151k]
  |  |  ------------------
  ------------------
 1317|      2|            {
 1318|      2|                BOOST_STATIC_CONSTEXPR source_location loc
 1319|      2|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      2|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1320|      2|                return fail(cs.begin(), error::syntax, &loc);
 1321|      2|            }
 1322|   151k|            ++cs;
 1323|   151k|            if(BOOST_JSON_UNLIKELY(*cs != 'u'))
  ------------------
  |  |  179|   151k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 11, False: 151k]
  |  |  ------------------
  ------------------
 1324|     11|            {
 1325|     11|                BOOST_STATIC_CONSTEXPR source_location loc
 1326|     11|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     11|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1327|     11|                return fail(cs.begin(), error::syntax, &loc);
 1328|     11|            }
 1329|   151k|            ++cs;
 1330|   151k|            digit = detail::load_little_endian<4>(cs.begin());
 1331|   151k|            d4 = detail::hex_digit(static_cast<
 1332|   151k|                unsigned char>(digit >> 24));
 1333|   151k|            d3 = detail::hex_digit(static_cast<
 1334|   151k|                unsigned char>(digit >> 16));
 1335|   151k|            d2 = detail::hex_digit(static_cast<
 1336|   151k|                unsigned char>(digit >> 8));
 1337|   151k|            d1 = detail::hex_digit(static_cast<
 1338|   151k|                unsigned char>(digit));
 1339|   151k|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|   151k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 65, False: 151k]
  |  |  ------------------
  ------------------
 1340|   151k|                (d1 | d2 | d3 | d4) == -1))
 1341|     65|            {
 1342|     65|                if(d1 != -1)
  ------------------
  |  Branch (1342:20): [True: 28, False: 37]
  ------------------
 1343|     28|                    ++cs;
 1344|     65|                if(d2 != -1)
  ------------------
  |  Branch (1344:20): [True: 28, False: 37]
  ------------------
 1345|     28|                    ++cs;
 1346|     65|                if(d3 != -1)
  ------------------
  |  Branch (1346:20): [True: 28, False: 37]
  ------------------
 1347|     28|                    ++cs;
 1348|     65|                BOOST_STATIC_CONSTEXPR source_location loc
 1349|     65|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     65|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1350|     65|                return fail(cs.begin(), error::expected_hex_digit, &loc);
 1351|     65|            }
 1352|   151k|            unsigned const u2 =
 1353|   151k|                (d1 << 12) + (d2 << 8) +
 1354|   151k|                (d3 << 4) + d4;
 1355|       |            // valid trailing surrogates are [DC00, DFFF]
 1356|   151k|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|   303k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 35, False: 151k]
  |  |  |  Branch (179:54): [True: 30, False: 151k]
  |  |  |  Branch (179:54): [True: 5, False: 151k]
  |  |  ------------------
  ------------------
 1357|   151k|                u2 < 0xdc00 || u2 > 0xdfff))
 1358|     35|            {
 1359|     35|                BOOST_STATIC_CONSTEXPR source_location loc
 1360|     35|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     35|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1361|     35|                return fail(cs.begin(), error::illegal_trailing_surrogate,
 1362|     35|                    &loc);
 1363|     35|            }
 1364|   151k|            cs += 4;
 1365|   151k|            unsigned cp =
 1366|   151k|                ((u1 - 0xd800) << 10) +
 1367|   151k|                ((u2 - 0xdc00)) +
 1368|   151k|                    0x10000;
 1369|       |            // utf-16 surrogate pair
 1370|   151k|            temp.append_utf8(cp);
 1371|   151k|            break;
 1372|   151k|        }
 1373|       |        // flush
 1374|  2.96k|        if(BOOST_JSON_LIKELY(! temp.empty()))
  ------------------
  |  |  171|  2.96k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 2.70k, False: 261]
  |  |  ------------------
  ------------------
 1375|  2.70k|        {
 1376|  2.70k|            BOOST_ASSERT(total <= max_size);
  ------------------
  |  |   60|  2.70k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1377|  2.70k|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  2.70k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 2.70k]
  |  |  ------------------
  ------------------
 1378|  2.70k|                temp.size() > max_size - total))
 1379|      0|            {
 1380|      0|                BOOST_STATIC_CONSTEXPR source_location loc
 1381|      0|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1382|      0|                return fail(cs.begin(), ev_too_large, &loc);
 1383|      0|            }
 1384|  2.70k|            total += temp.size();
 1385|  2.70k|            {
 1386|  2.70k|                bool r = is_key
  ------------------
  |  Branch (1386:26): [True: 1.14k, False: 1.55k]
  ------------------
 1387|  2.70k|                    ? h_.on_key_part(temp.get(), total, ec_)
 1388|  2.70k|                    : h_.on_string_part(temp.get(), total, ec_);
 1389|       |
 1390|  2.70k|                if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  2.70k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 2.70k]
  |  |  ------------------
  ------------------
 1391|      0|                {
 1392|      0|                    return fail(cs.begin());
 1393|      0|                }
 1394|  2.70k|            }
 1395|  2.70k|            temp.clear();
 1396|  2.70k|            cs.clip(temp.max_size());
 1397|  2.70k|        }
 1398|  2.96k|        ++cs;
 1399|       |        // utf-16 escape
 1400|  2.96k|do_str4:
 1401|  2.96k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.96k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 17, False: 2.94k]
  |  |  ------------------
  ------------------
 1402|     17|            return maybe_suspend(cs.begin(), state::str4, total);
 1403|  2.94k|        digit = detail::hex_digit(*cs);
 1404|  2.94k|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|  2.94k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 28, False: 2.91k]
  |  |  ------------------
  ------------------
 1405|     28|        {
 1406|     28|            BOOST_STATIC_CONSTEXPR source_location loc
 1407|     28|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     28|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1408|     28|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1409|     28|        }
 1410|  2.91k|        ++cs;
 1411|  2.91k|        u1_ = digit << 12;
 1412|  2.91k|do_str5:
 1413|  2.91k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.91k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 20, False: 2.89k]
  |  |  ------------------
  ------------------
 1414|     20|            return maybe_suspend(cs.begin(), state::str5, total);
 1415|  2.89k|        digit = detail::hex_digit(*cs);
 1416|  2.89k|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|  2.89k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 24, False: 2.87k]
  |  |  ------------------
  ------------------
 1417|     24|        {
 1418|     24|            BOOST_STATIC_CONSTEXPR source_location loc
 1419|     24|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     24|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1420|     24|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1421|     24|        }
 1422|  2.87k|        ++cs;
 1423|  2.87k|        u1_ += digit << 8;
 1424|  2.87k|do_str6:
 1425|  2.87k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.87k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 17, False: 2.85k]
  |  |  ------------------
  ------------------
 1426|     17|            return maybe_suspend(cs.begin(), state::str6, total);
 1427|  2.85k|        digit = detail::hex_digit(*cs);
 1428|  2.85k|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|  2.85k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 26, False: 2.83k]
  |  |  ------------------
  ------------------
 1429|     26|        {
 1430|     26|            BOOST_STATIC_CONSTEXPR source_location loc
 1431|     26|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     26|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1432|     26|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1433|     26|        }
 1434|  2.83k|        ++cs;
 1435|  2.83k|        u1_ += digit << 4;
 1436|  2.83k|do_str7:
 1437|  2.83k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.83k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 26, False: 2.80k]
  |  |  ------------------
  ------------------
 1438|     26|            return maybe_suspend(cs.begin(), state::str7, total);
 1439|  2.80k|        digit = detail::hex_digit(*cs);
 1440|  2.80k|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|  2.80k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 17, False: 2.78k]
  |  |  ------------------
  ------------------
 1441|     17|        {
 1442|     17|            BOOST_STATIC_CONSTEXPR source_location loc
 1443|     17|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     17|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1444|     17|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1445|     17|        }
 1446|  2.78k|        ++cs;
 1447|  2.78k|        u1_ += digit;
 1448|  2.78k|        if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  4.20k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.74k, False: 1.04k]
  |  |  |  Branch (171:52): [True: 1.37k, False: 1.41k]
  |  |  |  Branch (171:52): [True: 373, False: 1.04k]
  |  |  ------------------
  ------------------
 1449|  2.78k|            u1_ < 0xd800 || u1_ > 0xdfff))
 1450|  1.74k|        {
 1451|  1.74k|            BOOST_ASSERT(temp.empty());
  ------------------
  |  |   60|  1.74k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1452|       |            // utf-8 codepoint
 1453|  1.74k|            temp.append_utf8(u1_);
 1454|  1.74k|            break;
 1455|  1.74k|        }
 1456|  1.04k|        if(BOOST_JSON_UNLIKELY(u1_ > 0xdbff))
  ------------------
  |  |  179|  1.04k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 15, False: 1.02k]
  |  |  ------------------
  ------------------
 1457|     15|        {
 1458|     15|            BOOST_STATIC_CONSTEXPR source_location loc
 1459|     15|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     15|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1460|     15|            return fail(cs.begin(), error::illegal_trailing_surrogate, &loc);
 1461|     15|        }
 1462|  1.02k|do_sur1:
 1463|  1.02k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.02k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 15, False: 1.01k]
  |  |  ------------------
  ------------------
 1464|     15|            return maybe_suspend(cs.begin(), state::sur1, total);
 1465|  1.01k|        if(BOOST_JSON_UNLIKELY(*cs != '\\'))
  ------------------
  |  |  179|  1.01k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1, False: 1.01k]
  |  |  ------------------
  ------------------
 1466|      1|        {
 1467|      1|            BOOST_STATIC_CONSTEXPR source_location loc
 1468|      1|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      1|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1469|      1|            return fail(cs.begin(), error::syntax, &loc);
 1470|      1|        }
 1471|  1.01k|        ++cs;
 1472|  1.01k|do_sur2:
 1473|  1.01k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.01k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 2, False: 1.01k]
  |  |  ------------------
  ------------------
 1474|      2|            return maybe_suspend(cs.begin(), state::sur2, total);
 1475|  1.01k|        if(BOOST_JSON_UNLIKELY(*cs != 'u'))
  ------------------
  |  |  179|  1.01k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1, False: 1.00k]
  |  |  ------------------
  ------------------
 1476|      1|        {
 1477|      1|            BOOST_STATIC_CONSTEXPR source_location loc
 1478|      1|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      1|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1479|      1|            return fail(cs.begin(), error::syntax, &loc);
 1480|      1|        }
 1481|  1.00k|        ++cs;
 1482|  1.00k|do_sur3:
 1483|  1.00k|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.00k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 3, False: 1.00k]
  |  |  ------------------
  ------------------
 1484|      3|            return maybe_suspend(cs.begin(), state::sur3, total);
 1485|  1.00k|        digit = detail::hex_digit(*cs);
 1486|  1.00k|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|  1.00k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 13, False: 993]
  |  |  ------------------
  ------------------
 1487|     13|        {
 1488|     13|            BOOST_STATIC_CONSTEXPR source_location loc
 1489|     13|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     13|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1490|     13|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1491|     13|        }
 1492|    993|        ++cs;
 1493|    993|        u2_ = digit << 12;
 1494|    993|do_sur4:
 1495|    993|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|    993|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 10, False: 983]
  |  |  ------------------
  ------------------
 1496|     10|            return maybe_suspend(cs.begin(), state::sur4, total);
 1497|    983|        digit = detail::hex_digit(*cs);
 1498|    983|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|    983|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 10, False: 973]
  |  |  ------------------
  ------------------
 1499|     10|        {
 1500|     10|            BOOST_STATIC_CONSTEXPR source_location loc
 1501|     10|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     10|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1502|     10|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1503|     10|        }
 1504|    973|        ++cs;
 1505|    973|        u2_ += digit << 8;
 1506|    973|do_sur5:
 1507|    973|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|    973|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 7, False: 966]
  |  |  ------------------
  ------------------
 1508|      7|            return maybe_suspend(cs.begin(), state::sur5, total);
 1509|    966|        digit = detail::hex_digit(*cs);
 1510|    966|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|    966|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 15, False: 951]
  |  |  ------------------
  ------------------
 1511|     15|        {
 1512|     15|            BOOST_STATIC_CONSTEXPR source_location loc
 1513|     15|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     15|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1514|     15|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1515|     15|        }
 1516|    951|        ++cs;
 1517|    951|        u2_ += digit << 4;
 1518|    951|do_sur6:
 1519|    951|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|    951|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 17, False: 934]
  |  |  ------------------
  ------------------
 1520|     17|            return maybe_suspend(cs.begin(), state::sur6, total);
 1521|    934|        digit = detail::hex_digit(*cs);
 1522|    934|        if(BOOST_JSON_UNLIKELY(digit == -1))
  ------------------
  |  |  179|    934|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 9, False: 925]
  |  |  ------------------
  ------------------
 1523|      9|        {
 1524|      9|            BOOST_STATIC_CONSTEXPR source_location loc
 1525|      9|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      9|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1526|      9|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1527|      9|        }
 1528|    925|        ++cs;
 1529|    925|        u2_ += digit;
 1530|    925|        if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  1.83k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 25, False: 900]
  |  |  |  Branch (179:54): [True: 20, False: 905]
  |  |  |  Branch (179:54): [True: 5, False: 900]
  |  |  ------------------
  ------------------
 1531|    925|            u2_ < 0xdc00 || u2_ > 0xdfff))
 1532|     25|        {
 1533|     25|            BOOST_STATIC_CONSTEXPR source_location loc
 1534|     25|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     25|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1535|     25|            return fail(cs.begin(), error::expected_hex_digit, &loc);
 1536|     25|        }
 1537|    900|        unsigned cp =
 1538|    900|            ((u1_ - 0xd800) << 10) +
 1539|    900|            ((u2_ - 0xdc00)) +
 1540|    900|                0x10000;
 1541|    900|        BOOST_ASSERT(temp.empty());
  ------------------
  |  |   60|    900|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1542|       |        // utf-16 surrogate pair
 1543|    900|        temp.append_utf8(cp);
 1544|  4.38M|    }
 1545|  4.38M|do_str2:
 1546|       |    // KRYSTIAN TODO: we can append the characters
 1547|       |    // all at once instead of one at a time
 1548|  4.38M|    for(;;)
 1549|  20.0M|    {
 1550|  20.0M|        if(BOOST_JSON_UNLIKELY(! cs || temp.capacity() == 0 ))
  ------------------
  |  |  179|  40.1M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 3.45k, False: 20.0M]
  |  |  |  Branch (179:54): [True: 3.45k, False: 20.0M]
  |  |  |  Branch (179:54): [True: 0, False: 20.0M]
  |  |  ------------------
  ------------------
 1551|  3.45k|        {
 1552|       |            // flush
 1553|  3.45k|            if(BOOST_JSON_LIKELY(! temp.empty()))
  ------------------
  |  |  171|  3.45k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 3.45k, False: 0]
  |  |  ------------------
  ------------------
 1554|  3.45k|            {
 1555|  3.45k|                BOOST_ASSERT(total <= max_size);
  ------------------
  |  |   60|  3.45k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1556|  3.45k|                if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  3.45k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 3.45k]
  |  |  ------------------
  ------------------
 1557|  3.45k|                    temp.size() > max_size - total))
 1558|      0|                {
 1559|      0|                    BOOST_STATIC_CONSTEXPR source_location loc
 1560|      0|                        = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1561|      0|                    return fail(cs.begin(), ev_too_large, &loc);
 1562|      0|                }
 1563|  3.45k|                total += temp.size();
 1564|  3.45k|                {
 1565|  3.45k|                    bool r = is_key
  ------------------
  |  Branch (1565:30): [True: 701, False: 2.75k]
  ------------------
 1566|  3.45k|                        ? h_.on_key_part(temp.get(), total, ec_)
 1567|  3.45k|                        : h_.on_string_part(temp.get(), total, ec_);
 1568|       |
 1569|  3.45k|                    if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  3.45k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 3.45k]
  |  |  ------------------
  ------------------
 1570|      0|                    {
 1571|      0|                        return fail(cs.begin());
 1572|      0|                    }
 1573|  3.45k|                }
 1574|  3.45k|                temp.clear();
 1575|  3.45k|            }
 1576|  3.45k|            cs.clip(temp.max_size());
 1577|  3.45k|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  3.45k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 346, False: 3.11k]
  |  |  ------------------
  ------------------
 1578|    346|                return maybe_suspend(cs.begin(), state::str2, total);
 1579|  3.45k|        }
 1580|  20.0M|        c = *cs;
 1581|  20.0M|        if(BOOST_JSON_LIKELY(c == '\x22')) // '"'
  ------------------
  |  |  171|  20.0M|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 14.4k, False: 20.0M]
  |  |  ------------------
  ------------------
 1582|  14.4k|        {
 1583|  14.4k|            BOOST_ASSERT(total <= max_size);
  ------------------
  |  |   60|  14.4k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1584|  14.4k|            if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  14.4k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 14.4k]
  |  |  ------------------
  ------------------
 1585|  14.4k|                temp.size() > max_size - total))
 1586|      0|            {
 1587|      0|                BOOST_STATIC_CONSTEXPR source_location loc
 1588|      0|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1589|      0|                return fail(cs.begin(), ev_too_large, &loc);
 1590|      0|            }
 1591|  14.4k|            total += temp.size();
 1592|  14.4k|            {
 1593|  14.4k|                bool r = is_key
  ------------------
  |  Branch (1593:26): [True: 2.33k, False: 12.1k]
  ------------------
 1594|  14.4k|                    ? h_.on_key(temp.get(), total, ec_)
 1595|  14.4k|                    : h_.on_string(temp.get(), total, ec_);
 1596|       |
 1597|  14.4k|                if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  14.4k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 14.4k]
  |  |  ------------------
  ------------------
 1598|      0|                {
 1599|      0|                    return fail(cs.begin());
 1600|      0|                }
 1601|  14.4k|            }
 1602|  14.4k|            ++cs;
 1603|  14.4k|            return cs.begin();
 1604|  14.4k|        }
 1605|  20.0M|        else if((c & 0x80) && !allow_bad_utf8)
  ------------------
  |  Branch (1605:17): [True: 204k, False: 19.8M]
  |  Branch (1605:31): [True: 204k, False: 0]
  ------------------
 1606|   204k|        {
 1607|   204k|            seq_.save(cs.begin(), cs.remain());
 1608|   204k|            if(BOOST_JSON_UNLIKELY(! seq_.complete()))
  ------------------
  |  |  179|   204k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 685, False: 203k]
  |  |  ------------------
  ------------------
 1609|    685|            {
 1610|    685|                if(BOOST_JSON_LIKELY(! temp.empty()))
  ------------------
  |  |  171|    685|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 681, False: 4]
  |  |  ------------------
  ------------------
 1611|    681|                {
 1612|    681|                    BOOST_ASSERT(total <= max_size);
  ------------------
  |  |   60|    681|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1613|    681|                    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|    681|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 681]
  |  |  ------------------
  ------------------
 1614|    681|                        temp.size() > max_size - total))
 1615|      0|                    {
 1616|      0|                        BOOST_STATIC_CONSTEXPR source_location loc
 1617|      0|                            = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1618|      0|                        return fail(cs.begin(), ev_too_large, &loc);
 1619|      0|                    }
 1620|    681|                    total += temp.size();
 1621|    681|                    {
 1622|    681|                        bool r = is_key
  ------------------
  |  Branch (1622:34): [True: 550, False: 131]
  ------------------
 1623|    681|                            ? h_.on_key_part(temp.get(), total, ec_)
 1624|    681|                            : h_.on_string_part(temp.get(), total, ec_);
 1625|       |
 1626|    681|                        if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|    681|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 681]
  |  |  ------------------
  ------------------
 1627|      0|                        {
 1628|      0|                            return fail(cs.begin());
 1629|      0|                        }
 1630|    681|                    }
 1631|    681|                    temp.clear();
 1632|    681|                }
 1633|    685|                cs = cs.end();
 1634|       |                // ensure there is room for the saved byte sequence
 1635|    685|                cs.clip(temp.max_size() - seq_.length());
 1636|    685|                goto do_str8;
 1637|    685|            }
 1638|   203k|            if(BOOST_JSON_UNLIKELY(! seq_.valid()))
  ------------------
  |  |  179|   203k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 156, False: 203k]
  |  |  ------------------
  ------------------
 1639|    156|            {
 1640|    156|                BOOST_STATIC_CONSTEXPR source_location loc
 1641|    156|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|    156|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1642|    156|                return fail(cs.begin(), error::syntax, &loc);
 1643|    156|            }
 1644|   203k|            temp.append(seq_.data(), seq_.length());
 1645|   203k|            cs += seq_.length();
 1646|   203k|            continue;
 1647|   203k|        }
 1648|  19.8M|        else if(BOOST_JSON_LIKELY(c == '\\'))
  ------------------
  |  |  171|  19.8M|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 4.36M, False: 15.4M]
  |  |  ------------------
  ------------------
 1649|  4.36M|        {
 1650|  4.36M|            ++cs;
 1651|  4.36M|            goto do_str3;
 1652|  4.36M|        }
 1653|  15.4M|        else if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  15.4M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 49, False: 15.4M]
  |  |  ------------------
  ------------------
 1654|  15.4M|            detail::is_control(c)))
 1655|     49|        {
 1656|     49|            BOOST_STATIC_CONSTEXPR source_location loc
 1657|     49|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     49|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1658|     49|            return fail(cs.begin(), error::syntax, &loc);
 1659|     49|        }
 1660|  15.4M|        temp.push_back(c);
 1661|  15.4M|        ++cs;
 1662|  15.4M|    }
 1663|    685|do_str8:
 1664|    685|    uint8_t needed = seq_.needed();
 1665|    685|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|    685|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 37, False: 648]
  |  |  ------------------
  ------------------
 1666|    685|        ! seq_.append(cs.begin(), cs.remain())))
 1667|     37|        return maybe_suspend(cs.end(), state::str8, total);
 1668|    648|    if(BOOST_JSON_UNLIKELY(! seq_.valid()))
  ------------------
  |  |  179|    648|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 10, False: 638]
  |  |  ------------------
  ------------------
 1669|     10|    {
 1670|     10|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     10|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1671|     10|        return fail(cs.begin(), error::syntax, &loc);
 1672|     10|    }
 1673|    638|    temp.append(seq_.data(), seq_.length());
 1674|    638|    cs += needed;
 1675|    638|    goto do_str2;
 1676|    648|}
_ZN5boost4json6detail9hex_digitEh:
  176|  5.04M|{
  177|       |    // by Peter Dimov
  178|  5.04M|    if( c >= '0' && c <= '9' )
  ------------------
  |  Branch (178:9): [True: 5.04M, False: 165]
  |  Branch (178:21): [True: 2.36M, False: 2.67M]
  ------------------
  179|  2.36M|        return c - '0';
  180|  2.67M|    c &= ~0x20;
  181|  2.67M|    if( c >= 'A' && c <= 'F' )
  ------------------
  |  Branch (181:9): [True: 2.67M, False: 196]
  |  Branch (181:21): [True: 2.67M, False: 260]
  ------------------
  182|  2.67M|        return 10 + c - 'A';
  183|    456|    return -1;
  184|  2.67M|}
_ZN5boost4json6detail10is_controlEc:
  169|  15.4M|{
  170|  15.4M|    return static_cast<unsigned char>(c) < 32;
  171|  15.4M|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE11parse_arrayILb1ELb0EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IbXT0_EEEbb:
 1861|  4.36k|{
 1862|  4.36k|    detail::const_stream_wrapper cs(p, end_);
 1863|  4.36k|    std::size_t size;
 1864|  4.36k|    if(! stack_empty && ! st_.empty())
  ------------------
  |  Branch (1864:8): [Folded - Ignored]
  |  Branch (1864:25): [True: 0, False: 0]
  ------------------
 1865|      0|    {
 1866|       |        // resume
 1867|      0|        state st;
 1868|      0|        st_.pop(st);
 1869|      0|        st_.pop(size);
 1870|      0|        switch(st)
 1871|      0|        {
 1872|      0|        default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (1872:9): [True: 0, False: 0]
  ------------------
 1873|      0|        case state::arr1: goto do_arr1;
  ------------------
  |  Branch (1873:9): [True: 0, False: 0]
  ------------------
 1874|      0|        case state::arr2: goto do_arr2;
  ------------------
  |  Branch (1874:9): [True: 0, False: 0]
  ------------------
 1875|      0|        case state::arr3: goto do_arr3;
  ------------------
  |  Branch (1875:9): [True: 0, False: 0]
  ------------------
 1876|      0|        case state::arr4: goto do_arr4;
  ------------------
  |  Branch (1876:9): [True: 0, False: 0]
  ------------------
 1877|      0|        case state::arr5: goto do_arr5;
  ------------------
  |  Branch (1877:9): [True: 0, False: 0]
  ------------------
 1878|      0|        case state::arr6: goto do_arr6;
  ------------------
  |  Branch (1878:9): [True: 0, False: 0]
  ------------------
 1879|      0|        }
 1880|      0|    }
 1881|  4.36k|    BOOST_ASSERT(*cs == '[');
  ------------------
  |  |   60|  4.36k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1882|  4.36k|    size = 0;
 1883|  4.36k|    if(BOOST_JSON_UNLIKELY(! depth_))
  ------------------
  |  |  179|  4.36k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 4, False: 4.35k]
  |  |  ------------------
  ------------------
 1884|      4|    {
 1885|      4|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      4|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1886|      4|        return fail(cs.begin(), error::too_deep, &loc);
 1887|      4|    }
 1888|  4.35k|    --depth_;
 1889|  4.35k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  4.35k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 4.35k]
  |  |  ------------------
  ------------------
 1890|  4.35k|        ! h_.on_array_begin(ec_)))
 1891|      0|        return fail(cs.begin());
 1892|  4.35k|    ++cs;
 1893|       |    // array:
 1894|       |    //     '[' *ws ']'
 1895|       |    //     '[' *ws value *ws *[ ',' *ws value *ws ] ']'
 1896|  4.35k|do_arr1:
 1897|  4.35k|    cs = detail::count_whitespace(cs.begin(), cs.end());
 1898|  4.35k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  4.35k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 38, False: 4.31k]
  |  |  ------------------
  ------------------
 1899|     38|        return maybe_suspend(cs.begin(), state::arr1, size);
 1900|  4.31k|    if(BOOST_JSON_LIKELY(*cs != ']'))
  ------------------
  |  |  171|  4.31k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 3.61k, False: 708]
  |  |  ------------------
  ------------------
 1901|  3.61k|    {
 1902|  2.07M|loop:
 1903|  2.07M|        if(allow_comments && *cs == '/')
  ------------------
  |  Branch (1903:12): [Folded - Ignored]
  |  Branch (1903:30): [True: 0, False: 0]
  ------------------
 1904|      0|        {
 1905|      0|do_arr2:
 1906|      0|            cs = parse_comment(cs.begin(), stack_empty, std::false_type());
 1907|      0|            if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1908|      0|                return suspend_or_fail(state::arr2, size);
 1909|      0|            goto do_arr1;
 1910|      0|        }
 1911|  2.07M|        if(BOOST_JSON_UNLIKELY(++size >
  ------------------
  |  |  179|  2.07M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 2.07M]
  |  |  ------------------
  ------------------
 1912|  2.07M|            Handler::max_array_size))
 1913|      0|        {
 1914|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 1915|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1916|      0|            return fail(cs.begin(), error::array_too_large, &loc);
 1917|      0|        }
 1918|  2.07M|do_arr3:
 1919|       |        // array is not empty, value required
 1920|  2.07M|        cs = parse_value(cs.begin(), stack_empty, allow_comments, allow_trailing, allow_bad_utf8);
 1921|  2.07M|        if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|  2.07M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1.40k, False: 2.07M]
  |  |  ------------------
  ------------------
 1922|  1.40k|            return suspend_or_fail(state::arr3, size);
 1923|  2.07M|do_arr4:
 1924|  2.07M|        cs = detail::count_whitespace(cs.begin(), cs.end());
 1925|  2.07M|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.07M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 548, False: 2.07M]
  |  |  ------------------
  ------------------
 1926|    548|            return maybe_suspend(cs.begin(), state::arr4, size);
 1927|  2.07M|        if(BOOST_JSON_LIKELY(*cs == ','))
  ------------------
  |  |  171|  2.07M|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 2.07M, False: 1.57k]
  |  |  ------------------
  ------------------
 1928|  2.07M|        {
 1929|  2.07M|            ++cs;
 1930|  2.07M|do_arr5:
 1931|  2.07M|            cs = detail::count_whitespace(cs.begin(), cs.end());
 1932|  2.07M|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  2.07M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 83, False: 2.07M]
  |  |  ------------------
  ------------------
 1933|     83|                return maybe_suspend(cs.begin(), state::arr5, size);
 1934|       |            // loop for next element
 1935|  2.07M|            if(! allow_trailing || *cs != ']')
  ------------------
  |  Branch (1935:16): [True: 2.07M, False: 0]
  |  Branch (1935:36): [True: 0, False: 0]
  ------------------
 1936|  2.07M|                goto loop;
 1937|  2.07M|        }
 1938|  1.57k|        else if(BOOST_JSON_UNLIKELY(*cs != ']'))
  ------------------
  |  |  179|  1.57k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 363, False: 1.21k]
  |  |  ------------------
  ------------------
 1939|    363|        {
 1940|    363|            if(allow_comments && *cs == '/')
  ------------------
  |  Branch (1940:16): [Folded - Ignored]
  |  Branch (1940:34): [True: 0, False: 0]
  ------------------
 1941|      0|            {
 1942|      0|do_arr6:
 1943|      0|                cs = parse_comment(cs.begin(), stack_empty, std::false_type());
 1944|      0|                if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1945|      0|                    return suspend_or_fail(state::arr6, size);
 1946|      0|                goto do_arr4;
 1947|      0|            }
 1948|    363|            BOOST_STATIC_CONSTEXPR source_location loc
 1949|    363|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|    363|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1950|    363|            return fail(cs.begin(), error::syntax, &loc);
 1951|    363|        }
 1952|       |        // got closing bracket; fall through
 1953|  2.07M|    }
 1954|  1.92k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  1.92k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.92k]
  |  |  ------------------
  ------------------
 1955|  1.92k|        ! h_.on_array_end(size, ec_)))
 1956|      0|        return fail(cs.begin());
 1957|  1.92k|    ++depth_;
 1958|  1.92k|    ++cs;
 1959|  1.92k|    return cs.begin();
 1960|  1.92k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE15suspend_or_failENS4_5stateEm:
  275|  2.72k|{
  276|  2.72k|    if(BOOST_JSON_LIKELY(
  ------------------
  |  |  171|  4.20k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 0, False: 2.72k]
  |  |  |  Branch (171:52): [True: 1.47k, False: 1.25k]
  |  |  |  Branch (171:52): [True: 0, False: 1.47k]
  |  |  ------------------
  ------------------
  277|  2.72k|        ! ec_ && more_))
  278|      0|    {
  279|       |        // suspend
  280|      0|        reserve();
  281|      0|        st_.push_unchecked(n);
  282|      0|        st_.push_unchecked(st);
  283|      0|    }
  284|  2.72k|    return sentinel();
  285|  2.72k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE12parse_objectILb1ELb0EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IbXT0_EEEbb:
 1693|  16.1k|{
 1694|  16.1k|    detail::const_stream_wrapper cs(p, end_);
 1695|  16.1k|    std::size_t size;
 1696|  16.1k|    if(! stack_empty && ! st_.empty())
  ------------------
  |  Branch (1696:8): [Folded - Ignored]
  |  Branch (1696:25): [True: 0, False: 0]
  ------------------
 1697|      0|    {
 1698|       |        // resume
 1699|      0|        state st;
 1700|      0|        st_.pop(st);
 1701|      0|        st_.pop(size);
 1702|      0|        switch(st)
 1703|      0|        {
 1704|      0|        default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (1704:9): [True: 0, False: 0]
  ------------------
 1705|      0|        case state::obj1: goto do_obj1;
  ------------------
  |  Branch (1705:9): [True: 0, False: 0]
  ------------------
 1706|      0|        case state::obj2: goto do_obj2;
  ------------------
  |  Branch (1706:9): [True: 0, False: 0]
  ------------------
 1707|      0|        case state::obj3: goto do_obj3;
  ------------------
  |  Branch (1707:9): [True: 0, False: 0]
  ------------------
 1708|      0|        case state::obj4: goto do_obj4;
  ------------------
  |  Branch (1708:9): [True: 0, False: 0]
  ------------------
 1709|      0|        case state::obj5: goto do_obj5;
  ------------------
  |  Branch (1709:9): [True: 0, False: 0]
  ------------------
 1710|      0|        case state::obj6: goto do_obj6;
  ------------------
  |  Branch (1710:9): [True: 0, False: 0]
  ------------------
 1711|      0|        case state::obj7: goto do_obj7;
  ------------------
  |  Branch (1711:9): [True: 0, False: 0]
  ------------------
 1712|      0|        case state::obj8: goto do_obj8;
  ------------------
  |  Branch (1712:9): [True: 0, False: 0]
  ------------------
 1713|      0|        case state::obj9: goto do_obj9;
  ------------------
  |  Branch (1713:9): [True: 0, False: 0]
  ------------------
 1714|      0|        case state::obj10: goto do_obj10;
  ------------------
  |  Branch (1714:9): [True: 0, False: 0]
  ------------------
 1715|      0|        case state::obj11: goto do_obj11;
  ------------------
  |  Branch (1715:9): [True: 0, False: 0]
  ------------------
 1716|      0|        }
 1717|      0|    }
 1718|  16.1k|    BOOST_ASSERT(*cs == '{');
  ------------------
  |  |   60|  16.1k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1719|  16.1k|    size = 0;
 1720|  16.1k|    if(BOOST_JSON_UNLIKELY(! depth_))
  ------------------
  |  |  179|  16.1k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 6, False: 16.1k]
  |  |  ------------------
  ------------------
 1721|      6|    {
 1722|      6|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      6|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1723|      6|        return fail(cs.begin(), error::too_deep, &loc);
 1724|      6|    }
 1725|  16.1k|    --depth_;
 1726|  16.1k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  16.1k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 16.1k]
  |  |  ------------------
  ------------------
 1727|  16.1k|        ! h_.on_object_begin(ec_)))
 1728|      0|        return fail(cs.begin());
 1729|  16.1k|    ++cs;
 1730|       |    // object:
 1731|       |    //     '{' *ws '}'
 1732|       |    //     '{' *ws string *ws ':' *ws value *ws *[ ',' *ws string *ws ':' *ws value *ws ] '}'
 1733|  16.1k|do_obj1:
 1734|  16.1k|    cs = detail::count_whitespace(cs.begin(), cs.end());
 1735|  16.1k|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  16.1k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 38, False: 16.0k]
  |  |  ------------------
  ------------------
 1736|     38|        return maybe_suspend(cs.begin(), state::obj1, size);
 1737|  16.0k|    if(BOOST_JSON_LIKELY(*cs != '}'))
  ------------------
  |  |  171|  16.0k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 3.27k, False: 12.8k]
  |  |  ------------------
  ------------------
 1738|  3.27k|    {
 1739|  3.27k|        if(BOOST_JSON_UNLIKELY(*cs != '\x22'))
  ------------------
  |  |  179|  3.27k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 74, False: 3.19k]
  |  |  ------------------
  ------------------
 1740|     74|        {
 1741|     74|            if(allow_comments && *cs == '/')
  ------------------
  |  Branch (1741:16): [Folded - Ignored]
  |  Branch (1741:34): [True: 0, False: 0]
  ------------------
 1742|      0|            {
 1743|      0|do_obj2:
 1744|      0|                cs = parse_comment(cs.begin(), stack_empty, std::false_type());
 1745|      0|                if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1746|      0|                    return suspend_or_fail(state::obj2, size);
 1747|      0|                goto do_obj1;
 1748|      0|            }
 1749|     74|            BOOST_STATIC_CONSTEXPR source_location loc
 1750|     74|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     74|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1751|     74|            return fail(cs.begin(), error::syntax, &loc);
 1752|     74|        }
 1753|  1.02M|loop:
 1754|  1.02M|        if(BOOST_JSON_UNLIKELY(++size >
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.02M]
  |  |  ------------------
  ------------------
 1755|  1.02M|            Handler::max_object_size))
 1756|      0|        {
 1757|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 1758|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1759|      0|            return fail(cs.begin(), error::object_too_large, &loc);
 1760|      0|        }
 1761|  1.02M|do_obj3:
 1762|  1.02M|        cs = parse_string(cs.begin(), stack_empty, std::true_type(), allow_bad_utf8);
 1763|  1.02M|        if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 324, False: 1.02M]
  |  |  ------------------
  ------------------
 1764|    324|            return suspend_or_fail(state::obj3, size);
 1765|  1.02M|do_obj4:
 1766|  1.02M|        cs = detail::count_whitespace(cs.begin(), cs.end());
 1767|  1.02M|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 59, False: 1.02M]
  |  |  ------------------
  ------------------
 1768|     59|            return maybe_suspend(cs.begin(), state::obj4, size);
 1769|  1.02M|        if(BOOST_JSON_UNLIKELY(*cs != ':'))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 77, False: 1.02M]
  |  |  ------------------
  ------------------
 1770|     77|        {
 1771|     77|            if(allow_comments && *cs == '/')
  ------------------
  |  Branch (1771:16): [Folded - Ignored]
  |  Branch (1771:34): [True: 0, False: 0]
  ------------------
 1772|      0|            {
 1773|      0|do_obj5:
 1774|      0|                cs = parse_comment(cs.begin(), stack_empty, std::false_type());
 1775|      0|                if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1776|      0|                    return suspend_or_fail(state::obj5, size);
 1777|      0|                goto do_obj4;
 1778|      0|            }
 1779|     77|            BOOST_STATIC_CONSTEXPR source_location loc
 1780|     77|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     77|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1781|     77|            return fail(cs.begin(), error::syntax, &loc);
 1782|     77|        }
 1783|  1.02M|        ++cs;
 1784|  1.02M|do_obj6:
 1785|  1.02M|        cs = detail::count_whitespace(cs.begin(), cs.end());
 1786|  1.02M|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 33, False: 1.02M]
  |  |  ------------------
  ------------------
 1787|     33|            return maybe_suspend(cs.begin(), state::obj6, size);
 1788|  1.02M|do_obj7:
 1789|  1.02M|        cs = parse_value(cs.begin(), stack_empty, allow_comments, allow_trailing, allow_bad_utf8);
 1790|  1.02M|        if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 1.00k, False: 1.02M]
  |  |  ------------------
  ------------------
 1791|  1.00k|            return suspend_or_fail(state::obj7, size);
 1792|  1.02M|do_obj8:
 1793|  1.02M|        cs = detail::count_whitespace(cs.begin(), cs.end());
 1794|  1.02M|        if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 31, False: 1.02M]
  |  |  ------------------
  ------------------
 1795|     31|            return maybe_suspend(cs.begin(), state::obj8, size);
 1796|  1.02M|        if(BOOST_JSON_LIKELY(*cs == ','))
  ------------------
  |  |  171|  1.02M|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.02M, False: 1.58k]
  |  |  ------------------
  ------------------
 1797|  1.02M|        {
 1798|  1.02M|            ++cs;
 1799|  1.02M|do_obj9:
 1800|  1.02M|            cs = detail::count_whitespace(cs.begin(), cs.end());
 1801|  1.02M|            if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 28, False: 1.02M]
  |  |  ------------------
  ------------------
 1802|     28|                return maybe_suspend(cs.begin(), state::obj9, size);
 1803|       |
 1804|       |            // loop for next element
 1805|  1.02M|            if(BOOST_JSON_LIKELY(*cs == '\x22'))
  ------------------
  |  |  171|  1.02M|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.02M, False: 64]
  |  |  ------------------
  ------------------
 1806|  1.02M|                goto loop;
 1807|     64|            if(! allow_trailing || *cs != '}')
  ------------------
  |  Branch (1807:16): [True: 64, False: 0]
  |  Branch (1807:36): [True: 0, False: 0]
  ------------------
 1808|     64|            {
 1809|     64|                if(allow_comments && *cs == '/')
  ------------------
  |  Branch (1809:20): [Folded - Ignored]
  |  Branch (1809:38): [True: 0, False: 0]
  ------------------
 1810|      0|                {
 1811|      0|do_obj10:
 1812|      0|                    cs = parse_comment(cs.begin(), stack_empty, std::false_type());
 1813|      0|                    if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1814|      0|                        return suspend_or_fail(state::obj10, size);
 1815|      0|                    goto do_obj9;
 1816|      0|                }
 1817|     64|                BOOST_STATIC_CONSTEXPR source_location loc
 1818|     64|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     64|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1819|     64|                return fail(cs.begin(), error::syntax, &loc);
 1820|     64|            }
 1821|     64|        }
 1822|  1.58k|        else if(BOOST_JSON_UNLIKELY(*cs != '}'))
  ------------------
  |  |  179|  1.58k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 77, False: 1.50k]
  |  |  ------------------
  ------------------
 1823|     77|        {
 1824|     77|            if(allow_comments && *cs == '/')
  ------------------
  |  Branch (1824:16): [Folded - Ignored]
  |  Branch (1824:34): [True: 0, False: 0]
  ------------------
 1825|      0|            {
 1826|      0|do_obj11:
 1827|      0|                cs = parse_comment(cs.begin(), stack_empty, std::false_type());
 1828|      0|                if(BOOST_JSON_UNLIKELY(incomplete(cs)))
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1829|      0|                    return suspend_or_fail(state::obj11, size);
 1830|      0|                goto do_obj8;
 1831|      0|            }
 1832|     77|            BOOST_STATIC_CONSTEXPR source_location loc
 1833|     77|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     77|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1834|     77|            return fail(cs.begin(), error::syntax, &loc);
 1835|     77|        }
 1836|       |        // got closing brace, fall through
 1837|  1.02M|    }
 1838|  14.3k|    if(BOOST_JSON_UNLIKELY(
  ------------------
  |  |  179|  14.3k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 14.3k]
  |  |  ------------------
  ------------------
 1839|  14.3k|        ! h_.on_object_end(size, ec_)))
 1840|      0|        return fail(cs.begin());
 1841|  14.3k|    ++depth_;
 1842|  14.3k|    ++cs;
 1843|  14.3k|    return cs.begin();
 1844|  14.3k|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE12parse_stringILb1ELb1EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IbXT0_EEEb:
  957|  1.02M|{
  958|  1.02M|    if(! stack_empty && ! st_.empty())
  ------------------
  |  Branch (958:8): [Folded - Ignored]
  |  Branch (958:25): [True: 0, False: 0]
  ------------------
  959|      0|    {
  960|      0|        state st;
  961|      0|        st_.peek(st);
  962|      0|        switch(st)
  963|      0|        {
  964|      0|        default: BOOST_JSON_UNREACHABLE();
  ------------------
  |  |  189|      0|#  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (964:9): [True: 0, False: 0]
  ------------------
  965|      0|        case state::str1:
  ------------------
  |  Branch (965:9): [True: 0, False: 0]
  ------------------
  966|      0|            return parse_unescaped(p, stack_empty, is_key, allow_bad_utf8);
  967|       |
  968|      0|        case state::str2: case state::str3:
  ------------------
  |  Branch (968:9): [True: 0, False: 0]
  |  Branch (968:27): [True: 0, False: 0]
  ------------------
  969|      0|        case state::str4: case state::str5:
  ------------------
  |  Branch (969:9): [True: 0, False: 0]
  |  Branch (969:27): [True: 0, False: 0]
  ------------------
  970|      0|        case state::str6: case state::str7:
  ------------------
  |  Branch (970:9): [True: 0, False: 0]
  |  Branch (970:27): [True: 0, False: 0]
  ------------------
  971|      0|        case state::str8:
  ------------------
  |  Branch (971:9): [True: 0, False: 0]
  ------------------
  972|      0|        case state::sur1: case state::sur2:
  ------------------
  |  Branch (972:9): [True: 0, False: 0]
  |  Branch (972:27): [True: 0, False: 0]
  ------------------
  973|      0|        case state::sur3: case state::sur4:
  ------------------
  |  Branch (973:9): [True: 0, False: 0]
  |  Branch (973:27): [True: 0, False: 0]
  ------------------
  974|      0|        case state::sur5: case state::sur6:
  ------------------
  |  Branch (974:9): [True: 0, False: 0]
  |  Branch (974:27): [True: 0, False: 0]
  ------------------
  975|      0|            return parse_escaped(p, 0, stack_empty, is_key, allow_bad_utf8);
  976|      0|        }
  977|      0|    }
  978|       |
  979|  1.02M|    return parse_unescaped(p, std::true_type(), is_key, allow_bad_utf8);
  980|  1.02M|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE15parse_unescapedILb1ELb1EEEPKcS7_NSt3__117integral_constantIbXT_EEENS9_IbXT0_EEEb:
  993|  1.02M|{
  994|  1.02M|    detail::const_stream_wrapper cs(p, end_);
  995|  1.02M|    std::size_t total;
  996|  1.02M|    if(stack_empty || st_.empty())
  ------------------
  |  Branch (996:8): [Folded - Ignored]
  |  Branch (996:23): [True: 0, False: 0]
  ------------------
  997|  1.02M|    {
  998|  1.02M|        BOOST_ASSERT(*cs == '\x22'); // '"'
  ------------------
  |  |   60|  1.02M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  999|  1.02M|        ++cs;
 1000|  1.02M|        total = 0;
 1001|  1.02M|    }
 1002|      0|    else
 1003|      0|    {
 1004|      0|        state st;
 1005|      0|        st_.pop(st);
 1006|      0|        st_.pop(total);
 1007|      0|    }
 1008|  1.02M|    char const* start = cs.begin();
 1009|  1.02M|    cs = allow_bad_utf8?
  ------------------
  |  Branch (1009:10): [True: 0, False: 1.02M]
  ------------------
 1010|      0|        detail::count_valid<true>(cs.begin(), cs.end()):
 1011|  1.02M|        detail::count_valid<false>(cs.begin(), cs.end());
 1012|  1.02M|    std::size_t size = cs.used(start);
 1013|  1.02M|    if(is_key)
  ------------------
  |  Branch (1013:8): [Folded - Ignored]
  ------------------
 1014|  1.02M|    {
 1015|  1.02M|        BOOST_ASSERT(total <= Handler::max_key_size);
  ------------------
  |  |   60|  1.02M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1016|  1.02M|        if(BOOST_JSON_UNLIKELY(size >
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.02M]
  |  |  ------------------
  ------------------
 1017|  1.02M|            Handler::max_key_size - total))
 1018|      0|        {
 1019|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 1020|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1021|      0|            return fail(cs.begin(), error::key_too_large, &loc);
 1022|      0|        }
 1023|  1.02M|    }
 1024|      0|    else
 1025|      0|    {
 1026|      0|        BOOST_ASSERT(total <= Handler::max_string_size);
  ------------------
  |  |   60|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1027|      0|        if(BOOST_JSON_UNLIKELY(size >
  ------------------
  |  |  179|      0|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1028|      0|            Handler::max_string_size - total))
 1029|      0|        {
 1030|      0|            BOOST_STATIC_CONSTEXPR source_location loc
 1031|      0|                = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1032|      0|            return fail(cs.begin(), error::string_too_large, &loc);
 1033|      0|        }
 1034|      0|    }
 1035|  1.02M|    total += size;
 1036|  1.02M|    if(BOOST_JSON_UNLIKELY(! cs))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 85, False: 1.02M]
  |  |  ------------------
  ------------------
 1037|     85|    {
 1038|       |        // call handler if the string isn't empty
 1039|     85|        if(BOOST_JSON_LIKELY(size))
  ------------------
  |  |  171|     85|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 66, False: 19]
  |  |  ------------------
  ------------------
 1040|     66|        {
 1041|     66|            {
 1042|     66|                bool r = is_key?
  ------------------
  |  Branch (1042:26): [Folded - Ignored]
  ------------------
 1043|     66|                    h_.on_key_part( {start, size}, total, ec_ ):
 1044|     66|                    h_.on_string_part( {start, size}, total, ec_ );
 1045|       |
 1046|     66|                if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|     66|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 66]
  |  |  ------------------
  ------------------
 1047|      0|                {
 1048|      0|                    return fail(cs.begin());
 1049|      0|                }
 1050|     66|            }
 1051|     66|        }
 1052|     85|        return maybe_suspend(cs.begin(), state::str1, total);
 1053|     85|    }
 1054|       |    // at this point all valid characters have been skipped, so any remaining
 1055|       |    // if there are any more characters, they are either escaped, or incomplete
 1056|       |    // utf8, or invalid utf8
 1057|  1.02M|    if(BOOST_JSON_UNLIKELY(*cs != '\x22')) // '"'
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 2.57k, False: 1.02M]
  |  |  ------------------
  ------------------
 1058|  2.57k|    {
 1059|       |        // sequence is invalid or incomplete
 1060|  2.57k|        if((*cs & 0x80) && !allow_bad_utf8)
  ------------------
  |  Branch (1060:12): [True: 151, False: 2.41k]
  |  Branch (1060:28): [True: 151, False: 0]
  ------------------
 1061|    151|        {
 1062|    151|            seq_.save(cs.begin(), cs.remain());
 1063|    151|            if(BOOST_JSON_UNLIKELY(seq_.complete()))
  ------------------
  |  |  179|    151|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 126, False: 25]
  |  |  ------------------
  ------------------
 1064|    126|            {
 1065|    126|                BOOST_STATIC_CONSTEXPR source_location loc
 1066|    126|                    = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|    126|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1067|    126|                return fail(cs.begin(), error::syntax, &loc);
 1068|    126|            }
 1069|     25|            if(BOOST_JSON_LIKELY(size))
  ------------------
  |  |  171|     25|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 16, False: 9]
  |  |  ------------------
  ------------------
 1070|     16|            {
 1071|     16|                {
 1072|     16|                    bool r = is_key?
  ------------------
  |  Branch (1072:30): [Folded - Ignored]
  ------------------
 1073|     16|                        h_.on_key_part( {start, size}, total, ec_ ):
 1074|     16|                        h_.on_string_part( {start, size}, total, ec_ );
 1075|       |
 1076|     16|                    if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|     16|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 16]
  |  |  ------------------
  ------------------
 1077|      0|                    {
 1078|      0|                        return fail(cs.begin());
 1079|      0|                    }
 1080|     16|                }
 1081|     16|            }
 1082|     25|            return maybe_suspend(cs.end(), state::str8, total);
 1083|     25|        }
 1084|  2.41k|        else if(BOOST_JSON_LIKELY(*cs == '\\'))
  ------------------
  |  |  171|  2.41k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 2.40k, False: 11]
  |  |  ------------------
  ------------------
 1085|  2.40k|        {
 1086|       |            // flush unescaped run from input
 1087|  2.40k|            if(BOOST_JSON_LIKELY(size))
  ------------------
  |  |  171|  2.40k|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1.57k, False: 830]
  |  |  ------------------
  ------------------
 1088|  1.57k|            {
 1089|  1.57k|                {
 1090|  1.57k|                    bool r = is_key?
  ------------------
  |  Branch (1090:30): [Folded - Ignored]
  ------------------
 1091|  1.57k|                        h_.on_key_part( {start, size}, total, ec_ ):
 1092|  1.57k|                        h_.on_string_part( {start, size}, total, ec_ );
 1093|       |
 1094|  1.57k|                    if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  1.57k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.57k]
  |  |  ------------------
  ------------------
 1095|      0|                    {
 1096|      0|                        return fail(cs.begin());
 1097|      0|                    }
 1098|  1.57k|                }
 1099|  1.57k|            }
 1100|  2.40k|            return parse_escaped(cs.begin(), total, stack_empty, is_key, allow_bad_utf8);
 1101|  2.40k|        }
 1102|       |        // illegal control
 1103|     11|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|     11|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
 1104|     11|        return fail(cs.begin(), error::syntax, &loc);
 1105|  2.57k|    }
 1106|       |
 1107|  1.02M|    {
 1108|  1.02M|        bool r = is_key?
  ------------------
  |  Branch (1108:18): [Folded - Ignored]
  ------------------
 1109|  1.02M|            h_.on_key( {start, size}, total, ec_ ):
 1110|  1.02M|            h_.on_string( {start, size}, total, ec_ );
 1111|       |
 1112|  1.02M|        if(BOOST_JSON_UNLIKELY(!r))
  ------------------
  |  |  179|  1.02M|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 1.02M]
  |  |  ------------------
  ------------------
 1113|      0|        {
 1114|      0|            return fail(cs.begin());
 1115|      0|        }
 1116|  1.02M|    }
 1117|       |
 1118|  1.02M|    ++cs;
 1119|  1.02M|    return cs.begin();
 1120|  1.02M|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE10incompleteERKNS2_20const_stream_wrapperE:
  243|  4.13M|{
  244|  4.13M|    return cs.begin() == sentinel();
  245|  4.13M|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE8sentinelEv:
  231|  4.15M|{
  232|       |    // the "+1" ensures that the returned pointer is unique even if
  233|       |    // the given input buffer borders on this object
  234|  4.15M|    return reinterpret_cast<
  235|  4.15M|        const char*>(this) + 1;
  236|  4.15M|}
_ZN5boost4json12basic_parserINS0_6detail7handlerEE4failENS_6system10error_codeE:
 2728|    489|{
 2729|    489|    if(! ec)
  ------------------
  |  Branch (2729:8): [True: 0, False: 489]
  ------------------
 2730|      0|    {
 2731|       |        // assign an arbitrary
 2732|       |        // error code to prevent UB
 2733|      0|        BOOST_JSON_FAIL(ec_, error::incomplete);
  ------------------
  |  |   20|      0|    BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION; \
  |  |  ------------------
  |  |  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  |  |   21|      0|    (ec).assign(e, &loc);
  ------------------
 2734|      0|    }
 2735|    489|    else
 2736|    489|    {
 2737|    489|        ec_ = ec;
 2738|    489|    }
 2739|    489|    done_ = false;
 2740|    489|}

_ZN5boost4json6detail15unchecked_arrayC2EPNS0_5valueEmRKNS0_11storage_ptrE:
   41|  1.92k|    {
   42|  1.92k|    }
_ZNK5boost4json6detail15unchecked_array7storageEv:
   55|  1.92k|    {
   56|  1.92k|        return sp_;
   57|  1.92k|    }
_ZNK5boost4json6detail15unchecked_array4sizeEv:
   61|  4.35k|    {
   62|  4.35k|        return size_;
   63|  4.35k|    }

_ZN5boost4json6detail6bufferILm4096EEC2Ev:
   28|  15.6k|    buffer() = default;
_ZNK5boost4json6detail6bufferILm4096EE8max_sizeEv:
   67|  23.5k|    {
   68|  23.5k|        return N;
   69|  23.5k|    }
_ZNK5boost4json6detail6bufferILm4096EE5emptyEv:
   32|  8.16k|    {
   33|  8.16k|        return size_ == 0;
   34|  8.16k|    }
_ZNK5boost4json6detail6bufferILm4096EE4sizeEv:
   55|  44.5k|    {
   56|  44.5k|        return size_;
   57|  44.5k|    }
_ZNK5boost4json6detail6bufferILm4096EE3getEv:
   38|  22.2k|    {
   39|  22.2k|        return {buf_, size_};
   40|  22.2k|    }
_ZN5boost4json6detail6bufferILm4096EE5clearEv:
   73|  7.85k|    {
   74|  7.85k|        size_ = 0;
   75|  7.85k|    }
_ZN5boost4json6detail6bufferILm4096EE9push_backEc:
   79|  18.7M|    {
   80|  18.7M|        BOOST_ASSERT(capacity() > 0);
  ------------------
  |  |   60|  18.7M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   81|  18.7M|        buf_[size_++] = ch;
   82|  18.7M|    }
_ZN5boost4json6detail6bufferILm4096EE11append_utf8Em:
   99|  1.10M|    {
  100|  1.10M|        auto dest = buf_ + size_;
  101|  1.10M|        if(cp < 0x80)
  ------------------
  |  Branch (101:12): [True: 277k, False: 831k]
  ------------------
  102|   277k|        {
  103|   277k|            BOOST_ASSERT(size_ <= N - 1);
  ------------------
  |  |   60|   277k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  104|   277k|            dest[0] = static_cast<char>(cp);
  105|   277k|            size_ += 1;
  106|   277k|            return;
  107|   277k|        }
  108|       |
  109|   831k|        if(cp < 0x800)
  ------------------
  |  Branch (109:12): [True: 227k, False: 603k]
  ------------------
  110|   227k|        {
  111|   227k|            BOOST_ASSERT(size_ <= N - 2);
  ------------------
  |  |   60|   227k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  112|   227k|            dest[0] = static_cast<char>( (cp >> 6)          | 0xc0);
  113|   227k|            dest[1] = static_cast<char>( (cp & 0x3f)        | 0x80);
  114|   227k|            size_ += 2;
  115|   227k|            return;
  116|   227k|        }
  117|       |
  118|   603k|        if(cp < 0x10000)
  ------------------
  |  Branch (118:12): [True: 451k, False: 152k]
  ------------------
  119|   451k|        {
  120|   451k|            BOOST_ASSERT(size_ <= N - 3);
  ------------------
  |  |   60|   451k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  121|   451k|            dest[0] = static_cast<char>( (cp >> 12)         | 0xe0);
  122|   451k|            dest[1] = static_cast<char>(((cp >> 6) & 0x3f)  | 0x80);
  123|   451k|            dest[2] = static_cast<char>( (cp       & 0x3f)  | 0x80);
  124|   451k|            size_ += 3;
  125|   451k|            return;
  126|   451k|        }
  127|       |
  128|   152k|        {
  129|   152k|            BOOST_ASSERT(size_ <= N - 4);
  ------------------
  |  |   60|   152k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  130|   152k|            dest[0] = static_cast<char>( (cp >> 18)         | 0xf0);
  131|   152k|            dest[1] = static_cast<char>(((cp >> 12) & 0x3f) | 0x80);
  132|   152k|            dest[2] = static_cast<char>(((cp >> 6)  & 0x3f) | 0x80);
  133|   152k|            dest[3] = static_cast<char>( (cp        & 0x3f) | 0x80);
  134|   152k|            size_ += 4;
  135|   152k|        }
  136|   152k|    }
_ZNK5boost4json6detail6bufferILm4096EE8capacityEv:
   61|  20.0M|    {
   62|  20.0M|        return N - size_;
   63|  20.0M|    }
_ZN5boost4json6detail6bufferILm4096EE6appendEPKcm:
   89|   203k|    {
   90|   203k|        BOOST_ASSERT(n <= N - size_);
  ------------------
  |  |   60|   203k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   91|   203k|        std::memcpy(buf_ + size_, s, n);
   92|   203k|        size_ += n;
   93|   203k|    }

_ZN5boost4json6detail8exchangeImiEET_RS3_T0_:
  299|  9.20M|{
  300|  9.20M|    T v = std::move(t);
  301|  9.20M|    t = std::move(u);
  302|  9.20M|    return v;
  303|  9.20M|}

_ZN5boost4json6detail16default_resource3getEv:
   48|  2.06M|    {
   49|       |    #ifdef BOOST_JSON_WEAK_CONSTINIT
   50|       |        static default_resource instance_;
   51|       |    #endif
   52|  2.06M|        return reinterpret_cast<memory_resource*>(
   53|  2.06M|            reinterpret_cast<std::uintptr_t*>(
   54|  2.06M|                &instance_));
   55|  2.06M|    }

_ZN5boost4json6detail6digestIPKcEEmT_S5_m:
   24|   920k|{
   25|   920k|#if BOOST_JSON_ARCH == 64
   26|   920k|    std::uint64_t const prime = 0x100000001B3ULL;
   27|   920k|    std::uint64_t hash  = 0xcbf29ce484222325ULL;
   28|       |#else
   29|       |    std::uint32_t const prime = 0x01000193UL;
   30|       |    std::uint32_t hash  = 0x811C9DC5UL;
   31|       |#endif
   32|   920k|    hash += salt;
   33|  3.83M|    for(; b != e; ++b)
  ------------------
  |  Branch (33:11): [True: 2.91M, False: 920k]
  ------------------
   34|  2.91M|        hash = (*b ^ hash) * prime;
   35|   920k|    return hash;
   36|   920k|}

_ZN5boost4json6detail15unchecked_array8relocateEPNS0_5valueE:
   31|  1.21k|{
   32|  1.21k|    if(size_ > 0)
  ------------------
  |  Branch (32:8): [True: 1.21k, False: 0]
  ------------------
   33|  1.21k|        std::memcpy(
   34|  1.21k|            static_cast<void*>(dest),
   35|  1.21k|            data_, size_ * sizeof(value));
   36|  1.21k|    data_ = nullptr;
   37|  1.21k|}
_ZN5boost4json6detail15unchecked_arrayD2Ev:
   19|  1.92k|{
   20|  1.92k|    if(! data_ ||
  ------------------
  |  Branch (20:8): [True: 1.21k, False: 708]
  ------------------
   21|  1.92k|        sp_.is_not_shared_and_deallocate_is_trivial())
  ------------------
  |  Branch (21:9): [True: 0, False: 708]
  ------------------
   22|  1.21k|        return;
   23|    708|    for(unsigned long i = 0;
   24|    708|        i < size_; ++i)
  ------------------
  |  Branch (24:9): [True: 0, False: 708]
  ------------------
   25|      0|        data_[i].~value();
   26|    708|}

_ZN5boost4json6detail16default_resource11do_allocateEmm:
   42|  1.03M|{
   43|  1.03M|    return ::operator new(n);
   44|  1.03M|}
_ZN5boost4json6detail16default_resource13do_deallocateEPvmm:
   52|  1.03M|{
   53|  1.03M|    ::operator delete(p);
   54|  1.03M|}

_ZN5boost4json6detail7handlerC2IJNS0_11storage_ptrERPhRmEEEDpOT_:
   24|  6.85k|{
   25|  6.85k|}
_ZN5boost4json6detail7handler17on_document_beginERNS_6system10error_codeE:
   31|  6.85k|{
   32|  6.85k|    return true;
   33|  6.85k|}
_ZN5boost4json6detail7handler14on_number_partENS_4core17basic_string_viewIcEERNS_6system10error_codeE:
  128|    110|{
  129|    110|    return true;
  130|    110|}
_ZN5boost4json6detail7handler8on_int64ElNS_4core17basic_string_viewIcEERNS_6system10error_codeE:
  138|  3.01M|{
  139|  3.01M|    st.push_int64(i);
  140|  3.01M|    return true;
  141|  3.01M|}
_ZN5boost4json6detail7handler9on_uint64EmNS_4core17basic_string_viewIcEERNS_6system10error_codeE:
  149|  2.33k|{
  150|  2.33k|    st.push_uint64(u);
  151|  2.33k|    return true;
  152|  2.33k|}
_ZN5boost4json6detail7handler9on_doubleEdNS_4core17basic_string_viewIcEERNS_6system10error_codeE:
  160|  32.1k|{
  161|  32.1k|    st.push_double(d);
  162|  32.1k|    return true;
  163|  32.1k|}
_ZN5boost4json6detail7handler7on_nullERNS_6system10error_codeE:
  178|  3.48k|{
  179|  3.48k|    st.push_null();
  180|  3.48k|    return true;
  181|  3.48k|}
_ZN5boost4json6detail7handler7on_boolEbRNS_6system10error_codeE:
  170|  4.64k|{
  171|  4.64k|    st.push_bool(b);
  172|  4.64k|    return true;
  173|  4.64k|}
_ZN5boost4json6detail7handler14on_string_partENS_4core17basic_string_viewIcEEmRNS_6system10error_codeE:
  107|  15.6k|{
  108|  15.6k|    st.push_chars(s);
  109|  15.6k|    return true;
  110|  15.6k|}
_ZN5boost4json6detail7handler11on_key_partENS_4core17basic_string_viewIcEEmRNS_6system10error_codeE:
   85|  4.27k|{
   86|  4.27k|    st.push_chars(s);
   87|  4.27k|    return true;
   88|  4.27k|}
_ZN5boost4json6detail7handler6on_keyENS_4core17basic_string_viewIcEEmRNS_6system10error_codeE:
   96|  1.02M|{
   97|  1.02M|    st.push_key(s);
   98|  1.02M|    return true;
   99|  1.02M|}
_ZN5boost4json6detail7handler9on_stringENS_4core17basic_string_viewIcEEmRNS_6system10error_codeE:
  118|  30.7k|{
  119|  30.7k|    st.push_string(s);
  120|  30.7k|    return true;
  121|  30.7k|}
_ZN5boost4json6detail7handler14on_array_beginERNS_6system10error_codeE:
   65|  4.35k|{
   66|  4.35k|    return true;
   67|  4.35k|}
_ZN5boost4json6detail7handler12on_array_endEmRNS_6system10error_codeE:
   74|  1.92k|{
   75|  1.92k|    st.push_array(n);
   76|  1.92k|    return true;
   77|  1.92k|}
_ZN5boost4json6detail7handler15on_object_beginERNS_6system10error_codeE:
   47|  16.1k|{
   48|  16.1k|    return true;
   49|  16.1k|}
_ZN5boost4json6detail7handler13on_object_endEmRNS_6system10error_codeE:
   56|  14.3k|{
   57|  14.3k|    st.push_object(n);
   58|  14.3k|    return true;
   59|  14.3k|}
_ZN5boost4json6detail7handler15on_document_endERNS_6system10error_codeE:
   39|  2.60k|{
   40|  2.60k|    return true;
   41|  2.60k|}

_ZN5boost4json6detail5stackD2Ev:
   21|  6.85k|{
   22|  6.85k|    if(base_ != buf_)
  ------------------
  |  Branch (22:8): [True: 0, False: 6.85k]
  ------------------
   23|      0|        sp_->deallocate(
   24|      0|            base_, cap_);
   25|  6.85k|}

_ZN5boost4json6detail11string_implC2Ev:
   36|  30.7k|{
   37|  30.7k|    s_.k = short_string_;
   38|  30.7k|    s_.buf[sbo_chars_] =
   39|  30.7k|        static_cast<char>(
   40|  30.7k|            sbo_chars_);
   41|  30.7k|    s_.buf[0] = 0;
   42|  30.7k|}
_ZN5boost4json6detail11string_implC2EmRKNS0_11storage_ptrE:
   48|  2.84k|{
   49|  2.84k|    if(size <= sbo_chars_)
  ------------------
  |  Branch (49:8): [True: 0, False: 2.84k]
  ------------------
   50|      0|    {
   51|      0|        s_.k = short_string_;
   52|      0|        s_.buf[sbo_chars_] =
   53|      0|            static_cast<char>(
   54|      0|                sbo_chars_ - size);
   55|      0|        s_.buf[size] = 0;
   56|      0|    }
   57|  2.84k|    else
   58|  2.84k|    {
   59|  2.84k|        s_.k = kind::string;
   60|  2.84k|        auto const n = growth(
   61|  2.84k|            size, sbo_chars_ + 1);
   62|  2.84k|        p_.t = ::new(sp->allocate(
   63|  2.84k|            sizeof(table) +
   64|  2.84k|                n + 1,
   65|  2.84k|            alignof(table))) table{
   66|  2.84k|                static_cast<
   67|  2.84k|                    std::uint32_t>(size),
   68|  2.84k|                static_cast<
   69|  2.84k|                    std::uint32_t>(n)};
   70|  2.84k|        data()[n] = 0;
   71|  2.84k|    }
   72|  2.84k|}
_ZN5boost4json6detail11string_implC2ENS1_5key_tENS_4core17basic_string_viewIcEERKNS0_11storage_ptrE:
   80|  1.02M|{
   81|  1.02M|    BOOST_ASSERT(
  ------------------
  |  |   60|  1.02M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   82|  1.02M|        s.size() <= max_size());
   83|  1.02M|    k_.k = key_string_;
   84|  1.02M|    k_.n = static_cast<
   85|  1.02M|        std::uint32_t>(s.size());
   86|  1.02M|    k_.s = reinterpret_cast<char*>(
   87|  1.02M|        sp->allocate(s.size() + 1,
   88|  1.02M|            alignof(char)));
   89|  1.02M|    k_.s[s.size()] = 0; // null term
   90|  1.02M|    std::memcpy(&k_.s[0],
   91|  1.02M|        s.data(), s.size());
   92|  1.02M|}
_ZN5boost4json6detail11string_implC2ENS1_5key_tENS_4core17basic_string_viewIcEES6_RKNS0_11storage_ptrE:
  101|  1.59k|{
  102|  1.59k|    auto len = s1.size() + s2.size();
  103|  1.59k|    BOOST_ASSERT(len <= max_size());
  ------------------
  |  |   60|  1.59k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  104|  1.59k|    k_.k = key_string_;
  105|  1.59k|    k_.n = static_cast<
  106|  1.59k|        std::uint32_t>(len);
  107|  1.59k|    k_.s = reinterpret_cast<char*>(
  108|  1.59k|        sp->allocate(len + 1,
  109|  1.59k|            alignof(char)));
  110|  1.59k|    k_.s[len] = 0; // null term
  111|  1.59k|    std::memcpy(&k_.s[0],
  112|  1.59k|        s1.data(), s1.size());
  113|  1.59k|    std::memcpy(&k_.s[s1.size()],
  114|  1.59k|        s2.data(), s2.size());
  115|  1.59k|}
_ZN5boost4json6detail11string_impl6growthEmm:
  122|  5.68k|{
  123|  5.68k|    if(new_size > max_size())
  ------------------
  |  Branch (123:8): [True: 0, False: 5.68k]
  ------------------
  124|      0|    {
  125|      0|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
  126|      0|        detail::throw_system_error( error::string_too_large, &loc );
  127|      0|    }
  128|       |    // growth factor 2
  129|  5.68k|    if( capacity >
  ------------------
  |  Branch (129:9): [True: 0, False: 5.68k]
  ------------------
  130|  5.68k|        max_size() - capacity)
  131|      0|        return static_cast<
  132|      0|            std::uint32_t>(max_size()); // overflow
  133|  5.68k|    return static_cast<std::uint32_t>(
  134|  5.68k|        (std::max)(capacity * 2, new_size));
  135|  5.68k|}
_ZN5boost4json6detail11string_impl6assignEmRKNS0_11storage_ptrE:
  142|  20.5k|{
  143|  20.5k|    if(new_size > capacity())
  ------------------
  |  Branch (143:8): [True: 1.96k, False: 18.6k]
  ------------------
  144|  1.96k|    {
  145|  1.96k|        string_impl tmp(growth(
  146|  1.96k|            new_size,
  147|  1.96k|            capacity()), sp);
  148|  1.96k|        destroy(sp);
  149|  1.96k|        *this = tmp;
  150|  1.96k|    }
  151|  20.5k|    term(new_size);
  152|  20.5k|    return data();
  153|  20.5k|}

_ZN5boost4json6detail16unchecked_objectC2EPNS0_5valueEmRKNS0_11storage_ptrE:
   46|  14.3k|    {
   47|  14.3k|    }
_ZNK5boost4json6detail16unchecked_object7storageEv:
   60|  14.3k|    {
   61|  14.3k|        return sp_;
   62|  14.3k|    }
_ZNK5boost4json6detail16unchecked_object4sizeEv:
   66|  17.3k|    {
   67|  17.3k|        return size_;
   68|  17.3k|    }
_ZN5boost4json6detail16unchecked_object7releaseEv:
   72|  1.50k|    {
   73|  1.50k|        auto const data = data_;
   74|  1.50k|        data_ = nullptr;
   75|  1.50k|        return data;
   76|  1.50k|    }

_ZN5boost4json6detail10sbo_bufferILm34EED2Ev:
  116|  6.85k|    {
  117|  6.85k|        if( !is_small() )
  ------------------
  |  Branch (117:13): [True: 0, False: 6.85k]
  ------------------
  118|      0|            delete[] data_;
  119|  6.85k|    }
_ZNK5boost4json6detail10sbo_bufferILm34EE8is_smallEv:
   42|  6.85k|    {
   43|  6.85k|        return data_ == buffer_.data();
   44|  6.85k|    }
_ZN5boost4json6detail10sbo_bufferILm34EEC2Ev:
   74|  6.85k|    {}
_ZN5boost4json6detail10sbo_bufferILm34EE5clearEv:
  136|  3.06M|    {
  137|  3.06M|        size_ = 0;
  138|  3.06M|    }

_ZN5boost4json6detail16count_whitespaceEPKcS3_:
  425|  8.27M|{
  426|  8.27M|    if( p == end )
  ------------------
  |  Branch (426:9): [True: 2.73k, False: 8.27M]
  ------------------
  427|  2.73k|    {
  428|  2.73k|        return p;
  429|  2.73k|    }
  430|       |
  431|  8.27M|    if( static_cast<unsigned char>( *p ) > 0x20 )
  ------------------
  |  Branch (431:9): [True: 8.26M, False: 11.4k]
  ------------------
  432|  8.26M|    {
  433|  8.26M|        return p;
  434|  8.26M|    }
  435|       |
  436|  11.4k|    __m128i const q1 = _mm_set1_epi8( ' ' );
  437|  11.4k|    __m128i const q2 = _mm_set1_epi8( '\n' );
  438|  11.4k|    __m128i const q3 = _mm_set1_epi8( 4 ); // '\t' | 4 == '\r'
  439|  11.4k|    __m128i const q4 = _mm_set1_epi8( '\r' );
  440|       |
  441|  13.5k|    while( end - p >= 16 )
  ------------------
  |  Branch (441:12): [True: 12.8k, False: 759]
  ------------------
  442|  12.8k|    {
  443|  12.8k|        __m128i v0 = _mm_loadu_si128( (__m128i const*)p );
  444|       |
  445|  12.8k|        __m128i w0 = _mm_or_si128(
  446|  12.8k|            _mm_cmpeq_epi8( v0, q1 ),
  447|  12.8k|            _mm_cmpeq_epi8( v0, q2 ));
  448|  12.8k|        __m128i v1 = _mm_or_si128( v0, q3 );
  449|  12.8k|        __m128i w1 = _mm_cmpeq_epi8( v1, q4 );
  450|  12.8k|        __m128i w2 = _mm_or_si128( w0, w1 );
  451|       |
  452|  12.8k|        int m = _mm_movemask_epi8( w2 ) ^ 0xFFFF;
  453|       |
  454|  12.8k|        if( m != 0 )
  ------------------
  |  Branch (454:13): [True: 10.7k, False: 2.08k]
  ------------------
  455|  10.7k|        {
  456|  10.7k|#if defined(__GNUC__) || defined(__clang__)
  457|  10.7k|            std::size_t c = __builtin_ffs( m ) - 1;
  458|       |#else
  459|       |            unsigned long index;
  460|       |            _BitScanForward( &index, m );
  461|       |            std::size_t c = index;
  462|       |#endif
  463|       |
  464|  10.7k|            p += c;
  465|  10.7k|            return p;
  466|  10.7k|        }
  467|       |
  468|  2.08k|        p += 16;
  469|  2.08k|    }
  470|       |
  471|  1.87k|    while( p != end )
  ------------------
  |  Branch (471:12): [True: 1.60k, False: 268]
  ------------------
  472|  1.60k|    {
  473|  1.60k|        if( *p != ' ' && *p != '\t' && *p != '\r' && *p != '\n' )
  ------------------
  |  Branch (473:13): [True: 1.29k, False: 313]
  |  Branch (473:26): [True: 983, False: 313]
  |  Branch (473:40): [True: 740, False: 243]
  |  Branch (473:54): [True: 491, False: 249]
  ------------------
  474|    491|        {
  475|    491|            return p;
  476|    491|        }
  477|       |
  478|  1.11k|        ++p;
  479|  1.11k|    }
  480|       |
  481|    268|    return p;
  482|    759|}
_ZN5boost4json6detail12count_digitsEPKc:
  269|  2.54M|{
  270|  2.54M|    __m128i v1 = _mm_loadu_si128( (__m128i const*)p );
  271|  2.54M|    v1 = _mm_add_epi8(v1, _mm_set1_epi8(70));
  272|  2.54M|    v1 = _mm_cmplt_epi8(v1, _mm_set1_epi8(118));
  273|       |
  274|  2.54M|    int m = _mm_movemask_epi8(v1);
  275|       |
  276|  2.54M|    int n;
  277|       |
  278|  2.54M|    if( m == 0 )
  ------------------
  |  Branch (278:9): [True: 12.7k, False: 2.53M]
  ------------------
  279|  12.7k|    {
  280|  12.7k|        n = 16;
  281|  12.7k|    }
  282|  2.53M|    else
  283|  2.53M|    {
  284|  2.53M|#if defined(__GNUC__) || defined(__clang__)
  285|  2.53M|        n = __builtin_ffs( m ) - 1;
  286|       |#else
  287|       |        unsigned long index;
  288|       |        _BitScanForward( &index, m );
  289|       |        n = static_cast<int>(index);
  290|       |#endif
  291|  2.53M|    }
  292|       |
  293|  2.54M|    return n;
  294|  2.54M|}
_ZN5boost4json6detail14parse_unsignedEmPKcm:
  317|  2.54M|{
  318|  2.62M|    while( n >= 4 )
  ------------------
  |  Branch (318:12): [True: 77.2k, False: 2.54M]
  ------------------
  319|  77.2k|    {
  320|       |        // faster on on clang for x86,
  321|       |        // slower on gcc
  322|  77.2k|#ifdef __clang__
  323|  77.2k|        r = r * 10 + p[0] - '0';
  324|  77.2k|        r = r * 10 + p[1] - '0';
  325|  77.2k|        r = r * 10 + p[2] - '0';
  326|  77.2k|        r = r * 10 + p[3] - '0';
  327|       |#else
  328|       |        uint32_t v;
  329|       |        std::memcpy( &v, p, 4 );
  330|       |
  331|       |        v -= 0x30303030;
  332|       |
  333|       |        unsigned w0 = v & 0xFF;
  334|       |        unsigned w1 = (v >> 8) & 0xFF;
  335|       |        unsigned w2 = (v >> 16) & 0xFF;
  336|       |        unsigned w3 = (v >> 24);
  337|       |
  338|       |#ifdef BOOST_JSON_BIG_ENDIAN
  339|       |        r = (((r * 10 + w3) * 10 + w2) * 10 + w1) * 10 + w0;
  340|       |#else
  341|       |        r = (((r * 10 + w0) * 10 + w1) * 10 + w2) * 10 + w3;
  342|       |#endif
  343|       |#endif
  344|  77.2k|        p += 4;
  345|  77.2k|        n -= 4;
  346|  77.2k|    }
  347|       |
  348|  2.54M|    switch( n )
  ------------------
  |  Branch (348:13): [True: 0, False: 2.54M]
  ------------------
  349|  2.54M|    {
  350|  16.5k|    case 0:
  ------------------
  |  Branch (350:5): [True: 16.5k, False: 2.52M]
  ------------------
  351|  16.5k|        break;
  352|  2.49M|    case 1:
  ------------------
  |  Branch (352:5): [True: 2.49M, False: 50.3k]
  ------------------
  353|  2.49M|        r = r * 10 + p[0] - '0';
  354|  2.49M|        break;
  355|  24.1k|    case 2:
  ------------------
  |  Branch (355:5): [True: 24.1k, False: 2.52M]
  ------------------
  356|  24.1k|        r = r * 10 + p[0] - '0';
  357|  24.1k|        r = r * 10 + p[1] - '0';
  358|  24.1k|        break;
  359|  9.64k|    case 3:
  ------------------
  |  Branch (359:5): [True: 9.64k, False: 2.53M]
  ------------------
  360|  9.64k|        r = r * 10 + p[0] - '0';
  361|  9.64k|        r = r * 10 + p[1] - '0';
  362|  9.64k|        r = r * 10 + p[2] - '0';
  363|  9.64k|        break;
  364|  2.54M|    }
  365|  2.54M|    return r;
  366|  2.54M|}
_ZN5boost4json6detail11count_validILb0EEEPKcS4_S4_:
   89|  1.05M|{
   90|  1.05M|    __m128i const q1 = _mm_set1_epi8( '\x22' ); // '"'
   91|  1.05M|    __m128i const q2 = _mm_set1_epi8( '\\' );
   92|  1.05M|    __m128i const q3 = _mm_set1_epi8( 0x20 );
   93|       |
   94|  1.29M|    while(end - p >= 16)
  ------------------
  |  Branch (94:11): [True: 1.29M, False: 2.32k]
  ------------------
   95|  1.29M|    {
   96|  1.29M|        __m128i v1 = _mm_loadu_si128( (__m128i const*)p );
   97|       |
   98|  1.29M|        __m128i v2 = _mm_cmpeq_epi8( v1, q1 );
   99|  1.29M|        __m128i v3 = _mm_cmpeq_epi8( v1, q2 );
  100|  1.29M|        __m128i v4 = _mm_cmplt_epi8( v1, q3 );
  101|       |
  102|  1.29M|        __m128i v5 = _mm_or_si128( v2, v3 );
  103|  1.29M|        __m128i v6 = _mm_or_si128( v5, v4 );
  104|       |
  105|  1.29M|        int w = _mm_movemask_epi8( v6 );
  106|       |
  107|  1.29M|        if( w != 0 )
  ------------------
  |  Branch (107:13): [True: 1.05M, False: 239k]
  ------------------
  108|  1.05M|        {
  109|  1.05M|            int m;
  110|  1.05M|#if defined(__GNUC__) || defined(__clang__)
  111|  1.05M|            m = __builtin_ffs( w ) - 1;
  112|       |#else
  113|       |            unsigned long index;
  114|       |            _BitScanForward( &index, w );
  115|       |            m = index;
  116|       |#endif
  117|  1.05M|            p += m;
  118|  1.05M|            break;
  119|  1.05M|        }
  120|       |
  121|   239k|        p += 16;
  122|   239k|    }
  123|       |
  124|  32.5M|    while(p != end)
  ------------------
  |  Branch (124:11): [True: 32.5M, False: 228]
  ------------------
  125|  32.5M|    {
  126|  32.5M|        const unsigned char c = *p;
  127|  32.5M|        if(c == '\x22' || c == '\\' || c < 0x20)
  ------------------
  |  Branch (127:12): [True: 1.04M, False: 31.5M]
  |  Branch (127:27): [True: 15.6k, False: 31.5M]
  |  Branch (127:40): [True: 25, False: 31.5M]
  ------------------
  128|  1.05M|            break;
  129|  31.5M|        if(c < 0x80)
  ------------------
  |  Branch (129:12): [True: 31.3M, False: 138k]
  ------------------
  130|  31.3M|        {
  131|  31.3M|            ++p;
  132|  31.3M|            continue;
  133|  31.3M|        }
  134|       |        // validate utf-8
  135|   138k|        uint16_t first = classify_utf8(c);
  136|   138k|        uint8_t len = first & 0xFF;
  137|   138k|        if(BOOST_JSON_UNLIKELY(end - p < len))
  ------------------
  |  |  179|   138k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 54, False: 138k]
  |  |  ------------------
  ------------------
  138|     54|            break;
  139|   138k|        if(BOOST_JSON_UNLIKELY(! is_valid_utf8(p, first)))
  ------------------
  |  |  179|   138k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 250, False: 138k]
  |  |  ------------------
  ------------------
  140|    250|            break;
  141|   138k|        p += len;
  142|   138k|    }
  143|       |
  144|  1.05M|    return p;
  145|  1.05M|}

_ZN5boost4json6detail5stackC2Ev:
   33|  6.85k|    stack() = default;
_ZN5boost4json6detail5stack5clearEv:
   48|  13.7k|    {
   49|  13.7k|        size_ = 0;
   50|  13.7k|    }
_ZNK5boost4json6detail5stack5emptyEv:
   42|  6.85k|    {
   43|  6.85k|        return size_ == 0;
   44|  6.85k|    }

_ZN5boost4json6detail20const_stream_wrapperC2ERPKcS4_:
  133|  4.15M|    {
  134|  4.15M|    }
_ZNK5boost4json6detail20const_stream_wrapper5beginEv:
  162|  32.4M|    {
  163|  32.4M|        return p_;
  164|  32.4M|    }
_ZNK5boost4json6detail20const_stream_wrapper3endEv:
  167|  9.33M|    {
  168|  9.33M|        return end_;
  169|  9.33M|    }
_ZN5boost4json6detail20const_stream_wrapperaSEPKc:
  147|  13.4M|    {
  148|  13.4M|        p_ = p;
  149|  13.4M|    }
_ZNK5boost4json6detail20const_stream_wrappercvbEv:
  157|  11.6M|    {
  158|  11.6M|        return p_ < end_;
  159|  11.6M|    }
_ZNK5boost4json6detail20const_stream_wrapper6remainEv:
  172|  3.05M|    {
  173|  3.05M|        return end_ - p_;
  174|  3.05M|    }
_ZN5boost4json6detail20const_stream_wrapperppEv:
  137|  32.4M|    {
  138|  32.4M|        ++p_;
  139|  32.4M|    }
_ZN5boost4json6detail20const_stream_wrapperpLEm:
  142|  4.01M|    {
  143|  4.01M|        p_ += n;
  144|  4.01M|    }
_ZNK5boost4json6detail20const_stream_wrapper4usedEPKc:
  182|  4.10M|    {
  183|  4.10M|        return p_ - p;
  184|  4.10M|    }
_ZN5boost4json6detail20clipped_const_streamC2ERPKcS4_:
  198|  15.6k|    {
  199|  15.6k|    }
_ZN5boost4json6detail20clipped_const_stream4clipEm:
  228|  23.5k|    {
  229|  23.5k|        if(static_cast<std::size_t>(
  ------------------
  |  Branch (229:12): [True: 19.3k, False: 4.27k]
  ------------------
  230|  23.5k|            end_ - p_) > n)
  231|  19.3k|            clip_ = p_ + n;
  232|  4.27k|        else
  233|  4.27k|            clip_ = end_;
  234|  23.5k|    }
_ZNK5boost4json6detail20clipped_const_streamcvbEv:
  212|  24.4M|    {
  213|  24.4M|        return p_ < clip_;
  214|  24.4M|    }
_ZNK5boost4json6detail20clipped_const_stream6remainEv:
  217|  1.31M|    {
  218|  1.31M|        return clip_ - p_;
  219|  1.31M|    }
_ZNK5boost4json6detail20clipped_const_stream3endEv:
  207|    722|    {
  208|    722|        return clip_;
  209|    722|    }
_ZN5boost4json6detail20clipped_const_streamaSEPKc:
  202|    685|    {
  203|    685|        p_ = p;
  204|    685|    }
_ZNK5boost4json6detail20const_stream_wrapperdeEv:
  152|  36.3M|    {
  153|  36.3M|        return *p_;
  154|  36.3M|    }

_ZN5boost4json6detail11string_impl8max_sizeEv:
  102|  11.3k|    {
  103|       |        // max_size depends on the address model
  104|  11.3k|        using min = std::integral_constant<std::size_t,
  105|  11.3k|            std::size_t(-1) - sizeof(table)>;
  106|  11.3k|        return min::value < BOOST_JSON_MAX_STRING_SIZE ?
  ------------------
  |  |  226|  11.3k|# define BOOST_JSON_MAX_STRING_SIZE  0x7ffffffe
  ------------------
  |  Branch (106:16): [Folded - Ignored]
  ------------------
  107|  11.3k|            min::value : BOOST_JSON_MAX_STRING_SIZE;
  ------------------
  |  |  226|  11.3k|# define BOOST_JSON_MAX_STRING_SIZE  0x7ffffffe
  ------------------
  108|  11.3k|    }
_ZNK5boost4json6detail11string_impl4sizeEv:
  190|  11.9k|    {
  191|  11.9k|        return s_.k == kind::string ?
  ------------------
  |  Branch (191:16): [True: 883, False: 11.0k]
  ------------------
  192|    883|            p_.t->size :
  193|  11.9k|            sbo_chars_ -
  194|  11.0k|                s_.buf[sbo_chars_];
  195|  11.9k|    }
_ZNK5boost4json6detail11string_impl8capacityEv:
  199|  34.5k|    {
  200|  34.5k|        return s_.k == kind::string ?
  ------------------
  |  Branch (200:16): [True: 0, False: 34.5k]
  ------------------
  201|      0|            p_.t->capacity :
  202|  34.5k|            sbo_chars_;
  203|  34.5k|    }
_ZN5boost4json6detail11string_impl4sizeEm:
  207|    883|    {
  208|    883|        if(s_.k == kind::string)
  ------------------
  |  Branch (208:12): [True: 883, False: 0]
  ------------------
  209|    883|            p_.t->size = static_cast<
  210|    883|                std::uint32_t>(n);
  211|      0|        else
  212|      0|            s_.buf[sbo_chars_] =
  213|      0|                static_cast<char>(
  214|      0|                    sbo_chars_ - n);
  215|    883|    }
_ZN5boost4json6detail11string_impl11release_keyERm:
  227|   922k|    {
  228|   922k|        BOOST_ASSERT(
  ------------------
  |  |   60|   922k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  229|   922k|            k_.k == key_string_);
  230|   922k|        n = k_.n;
  231|   922k|        auto const s = k_.s;
  232|       |        // prevent deallocate
  233|   922k|        k_.k = short_string_;
  234|   922k|        return s;
  235|   922k|    }
_ZN5boost4json6detail11string_impl7destroyERKNS0_11storage_ptrE:
  240|   137k|    {
  241|   137k|        if(s_.k == kind::string)
  ------------------
  |  Branch (241:12): [True: 2.84k, False: 134k]
  ------------------
  242|  2.84k|        {
  243|  2.84k|            sp->deallocate(p_.t,
  244|  2.84k|                sizeof(table) +
  245|  2.84k|                    p_.t->capacity + 1,
  246|  2.84k|                alignof(table));
  247|  2.84k|        }
  248|   134k|        else if(s_.k != key_string_)
  ------------------
  |  Branch (248:17): [True: 30.7k, False: 103k]
  ------------------
  249|  30.7k|        {
  250|       |            // do nothing
  251|  30.7k|        }
  252|   103k|        else
  253|   103k|        {
  254|   103k|            BOOST_ASSERT(
  ------------------
  |  |   60|   103k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  255|   103k|                s_.k == key_string_);
  256|       |            // VFALCO unfortunately the key string
  257|       |            // kind increases the cost of the destructor.
  258|       |            // This function should be skipped when using
  259|       |            // monotonic_resource.
  260|   103k|            sp->deallocate(k_.s, k_.n + 1);
  261|   103k|        }
  262|   137k|    }
_ZN5boost4json6detail11string_impl4termEm:
  315|  30.7k|    {
  316|  30.7k|        if(s_.k == short_string_)
  ------------------
  |  Branch (316:12): [True: 27.9k, False: 2.84k]
  ------------------
  317|  27.9k|        {
  318|  27.9k|            s_.buf[sbo_chars_] =
  319|  27.9k|                static_cast<char>(
  320|  27.9k|                    sbo_chars_ - n);
  321|  27.9k|            s_.buf[n] = 0;
  322|  27.9k|        }
  323|  2.84k|        else
  324|  2.84k|        {
  325|  2.84k|            p_.t->size = static_cast<
  326|  2.84k|                std::uint32_t>(n);
  327|  2.84k|            data()[n] = 0;
  328|  2.84k|        }
  329|  30.7k|    }
_ZN5boost4json6detail11string_impl4dataEv:
  333|  48.4k|    {
  334|  48.4k|        if(s_.k == short_string_)
  ------------------
  |  Branch (334:12): [True: 38.1k, False: 10.2k]
  ------------------
  335|  38.1k|            return s_.buf;
  336|  10.2k|        return reinterpret_cast<
  337|  10.2k|            char*>(p_.t + 1);
  338|  48.4k|    }

_ZN5boost4json6detail13classify_utf8Ec:
   41|   342k|{
   42|       |    // 0x000 = invalid
   43|       |    // 0x102 = 2 bytes, second byte [80, BF]
   44|       |    // 0x203 = 3 bytes, second byte [A0, BF]
   45|       |    // 0x303 = 3 bytes, second byte [80, BF]
   46|       |    // 0x403 = 3 bytes, second byte [80, 9F]
   47|       |    // 0x504 = 4 bytes, second byte [90, BF]
   48|       |    // 0x604 = 4 bytes, second byte [80, BF]
   49|       |    // 0x704 = 4 bytes, second byte [80, 8F]
   50|   342k|    static constexpr uint16_t first[128]
   51|   342k|    {
   52|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   53|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   54|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   55|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   56|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   57|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   58|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   59|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   60|       |
   61|   342k|       0x000, 0x000, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102,
   62|   342k|       0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102,
   63|   342k|       0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102,
   64|   342k|       0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102,
   65|   342k|       0x203, 0x303, 0x303, 0x303, 0x303, 0x303, 0x303, 0x303,
   66|   342k|       0x303, 0x303, 0x303, 0x303, 0x303, 0x403, 0x303, 0x303,
   67|   342k|       0x504, 0x604, 0x604, 0x604, 0x704, 0x000, 0x000, 0x000,
   68|   342k|       0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
   69|   342k|    };
   70|   342k|    return first[static_cast<unsigned char>(c & 0x7F)];
   71|   342k|}
_ZN5boost4json6detail13is_valid_utf8EPKct:
   76|   342k|{
   77|   342k|    uint32_t v;
   78|   342k|    switch(first >> 8)
   79|   342k|    {
   80|    124|    default:
  ------------------
  |  Branch (80:5): [True: 124, False: 342k]
  ------------------
   81|    124|        return false;
   82|       |
   83|       |    // 2 bytes, second byte [80, BF]
   84|  43.5k|    case 1:
  ------------------
  |  Branch (84:5): [True: 43.5k, False: 298k]
  ------------------
   85|  43.5k|        v = load_little_endian<2>(p);
   86|  43.5k|        return (v & 0xC000) == 0x8000;
   87|       |
   88|       |    // 3 bytes, second byte [A0, BF]
   89|  9.14k|    case 2:
  ------------------
  |  Branch (89:5): [True: 9.14k, False: 333k]
  ------------------
   90|  9.14k|        v = load_little_endian<3>(p);
   91|  9.14k|        return (v & 0xC0E000) == 0x80A000;
   92|       |
   93|       |    // 3 bytes, second byte [80, BF]
   94|  59.4k|    case 3:
  ------------------
  |  Branch (94:5): [True: 59.4k, False: 283k]
  ------------------
   95|  59.4k|        v = load_little_endian<3>(p);
   96|  59.4k|        return (v & 0xC0C000) == 0x808000;
   97|       |
   98|       |    // 3 bytes, second byte [80, 9F]
   99|  69.9k|    case 4:
  ------------------
  |  Branch (99:5): [True: 69.9k, False: 272k]
  ------------------
  100|  69.9k|        v = load_little_endian<3>(p);
  101|  69.9k|        return (v & 0xC0E000) == 0x808000;
  102|       |
  103|       |    // 4 bytes, second byte [90, BF]
  104|  10.9k|    case 5:
  ------------------
  |  Branch (104:5): [True: 10.9k, False: 331k]
  ------------------
  105|  10.9k|        v = load_little_endian<4>(p);
  106|  10.9k|        return (v & 0xC0C0FF00) + 0x7F7F7000 <= 0x2F00;
  107|       |
  108|       |    // 4 bytes, second byte [80, BF]
  109|   134k|    case 6:
  ------------------
  |  Branch (109:5): [True: 134k, False: 207k]
  ------------------
  110|   134k|        v = load_little_endian<4>(p);
  111|   134k|        return (v & 0xC0C0C000) == 0x80808000;
  112|       |
  113|       |    // 4 bytes, second byte [80, 8F]
  114|  14.6k|    case 7:
  ------------------
  |  Branch (114:5): [True: 14.6k, False: 327k]
  ------------------
  115|  14.6k|        v = load_little_endian<4>(p);
  116|  14.6k|        return (v & 0xC0C0F000) == 0x80808000;
  117|   342k|    }
  118|   342k|}
_ZN5boost4json6detail18load_little_endianILi2EEEjPKv:
   26|  43.5k|{
   27|  43.5k|    std::uint32_t v = 0;
   28|  43.5k|    std::memcpy(&v, p, N);
   29|       |#ifdef BOOST_JSON_BIG_ENDIAN
   30|       |    v = ((v & 0xFF000000) >> 24) |
   31|       |        ((v & 0x00FF0000) >>  8) |
   32|       |        ((v & 0x0000FF00) <<  8) |
   33|       |        ((v & 0x000000FF) << 24);
   34|       |#endif
   35|  43.5k|    return v;
   36|  43.5k|}
_ZN5boost4json6detail18load_little_endianILi3EEEjPKv:
   26|   138k|{
   27|   138k|    std::uint32_t v = 0;
   28|   138k|    std::memcpy(&v, p, N);
   29|       |#ifdef BOOST_JSON_BIG_ENDIAN
   30|       |    v = ((v & 0xFF000000) >> 24) |
   31|       |        ((v & 0x00FF0000) >>  8) |
   32|       |        ((v & 0x0000FF00) <<  8) |
   33|       |        ((v & 0x000000FF) << 24);
   34|       |#endif
   35|   138k|    return v;
   36|   138k|}
_ZN5boost4json6detail18load_little_endianILi4EEEjPKv:
   26|  1.41M|{
   27|  1.41M|    std::uint32_t v = 0;
   28|  1.41M|    std::memcpy(&v, p, N);
   29|       |#ifdef BOOST_JSON_BIG_ENDIAN
   30|       |    v = ((v & 0xFF000000) >> 24) |
   31|       |        ((v & 0x00FF0000) >>  8) |
   32|       |        ((v & 0x0000FF00) <<  8) |
   33|       |        ((v & 0x000000FF) << 24);
   34|       |#endif
   35|  1.41M|    return v;
   36|  1.41M|}
_ZN5boost4json6detail13utf8_sequence4saveEPKcm:
  131|   204k|    {
  132|   204k|        first_ = classify_utf8(*p );
  133|   204k|        if(remain >= length())
  ------------------
  |  Branch (133:12): [True: 203k, False: 739]
  ------------------
  134|   203k|            size_ = length();
  135|    739|        else
  136|    739|            size_ = static_cast<uint8_t>(remain);
  137|   204k|        std::memcpy(seq_, p, size_);
  138|   204k|    }
_ZNK5boost4json6detail13utf8_sequence6lengthEv:
  142|  1.02M|    {
  143|  1.02M|        return first_ & 0xFF;
  144|  1.02M|    }
_ZNK5boost4json6detail13utf8_sequence8completeEv:
  148|   204k|    {
  149|   204k|        return size_ >= length();
  150|   204k|    }
_ZNK5boost4json6detail13utf8_sequence5validEv:
  189|   203k|    {
  190|   203k|        BOOST_ASSERT(size_ >= length());
  ------------------
  |  |   60|   203k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  191|   203k|        return is_valid_utf8(seq_, first_);
  192|   203k|    }
_ZNK5boost4json6detail13utf8_sequence4dataEv:
  177|   203k|    {
  178|   203k|        return seq_;
  179|   203k|    }
_ZNK5boost4json6detail13utf8_sequence6neededEv:
  183|  2.70k|    {
  184|  2.70k|        return length() - size_;
  185|  2.70k|    }
_ZN5boost4json6detail13utf8_sequence6appendEPKcm:
  157|    685|    {
  158|    685|        if(BOOST_JSON_UNLIKELY(needed() == 0))
  ------------------
  |  |  179|    685|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 0, False: 685]
  |  |  ------------------
  ------------------
  159|      0|            return true;
  160|    685|        if(BOOST_JSON_LIKELY(remain >= needed()))
  ------------------
  |  |  171|    685|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 648, False: 37]
  |  |  ------------------
  ------------------
  161|    648|        {
  162|    648|            std::memcpy(
  163|    648|                seq_ + size_, p, needed());
  164|    648|            size_ = length();
  165|    648|            return true;
  166|    648|        }
  167|     37|        if(BOOST_JSON_LIKELY(remain > 0))
  ------------------
  |  |  171|     37|#  define BOOST_JSON_LIKELY(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (171:32): [True: 1, False: 36]
  |  |  ------------------
  ------------------
  168|      1|        {
  169|      1|            std::memcpy(seq_ + size_, p, remain);
  170|      1|            size_ += static_cast<uint8_t>(remain);
  171|      1|        }
  172|     37|        return false;
  173|    685|    }

_ZN5boost4json6detail6scalarC2ENS0_11storage_ptrE:
  180|   933k|    {
  181|   933k|    }
_ZN5boost4json6detail6scalarC2EbNS0_11storage_ptrE:
  189|  4.64k|    {
  190|  4.64k|    }
_ZN5boost4json6detail6scalarC2ElNS0_11storage_ptrE:
  198|  3.01M|    {
  199|  3.01M|    }
_ZN5boost4json6detail6scalarC2EmNS0_11storage_ptrE:
  207|  2.33k|    {
  208|  2.33k|    }
_ZN5boost4json6detail6scalarC2EdNS0_11storage_ptrE:
  216|  32.1k|    {
  217|  32.1k|    }
_ZN5boost4json6detail6access4nextINS0_14key_value_pairEEERjRT_:
  262|  1.83M|    {
  263|  1.83M|        return e.next_;
  264|  1.83M|    }
_ZN5boost4json6detail6access24construct_key_value_pairINS0_14key_value_pairEJNS0_8pilferedINS0_5valueEEES7_EEERT_PS8_DpOT0_:
  237|   922k|    {
  238|   922k|        return *reinterpret_cast<
  239|   922k|            KeyValuePair*>(::new(p)
  240|   922k|                KeyValuePair(
  241|   922k|                    std::forward<Args>(args)...));
  242|   922k|    }
_ZN5boost4json6detail6access11release_keyINS0_5valueEEEPKcRT_Rm:
  250|   922k|    {
  251|   922k|        BOOST_ASSERT(jv.is_string());
  ------------------
  |  |   60|   922k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  252|   922k|        jv.str_.sp_.~storage_ptr();
  253|   922k|        return jv.str_.impl_.release_key(len);
  254|   922k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJNS1_15unchecked_arrayEEEERT_PS6_DpOT0_:
  226|  1.92k|    {
  227|  1.92k|        return *reinterpret_cast<
  228|  1.92k|            Value*>(::new(p) Value(
  229|  1.92k|            std::forward<Args>(args)...));
  230|  1.92k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJNS1_16unchecked_objectEEEERT_PS6_DpOT0_:
  226|  14.3k|    {
  227|  14.3k|        return *reinterpret_cast<
  228|  14.3k|            Value*>(::new(p) Value(
  229|  14.3k|            std::forward<Args>(args)...));
  230|  14.3k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJNS1_5key_tERNS_4core17basic_string_viewIcEERNS0_11storage_ptrEEEERT_PSC_DpOT0_:
  226|  1.02M|    {
  227|  1.02M|        return *reinterpret_cast<
  228|  1.02M|            Value*>(::new(p) Value(
  229|  1.02M|            std::forward<Args>(args)...));
  230|  1.02M|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJNS1_5key_tERNS_4core17basic_string_viewIcEES9_RNS0_11storage_ptrEEEERT_PSC_DpOT0_:
  226|  1.59k|    {
  227|  1.59k|        return *reinterpret_cast<
  228|  1.59k|            Value*>(::new(p) Value(
  229|  1.59k|            std::forward<Args>(args)...));
  230|  1.59k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJRNS_4core17basic_string_viewIcEERNS0_11storage_ptrEEEERT_PSB_DpOT0_:
  226|  20.5k|    {
  227|  20.5k|        return *reinterpret_cast<
  228|  20.5k|            Value*>(::new(p) Value(
  229|  20.5k|            std::forward<Args>(args)...));
  230|  20.5k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJRKNS0_13string_kind_tERNS0_11storage_ptrEEEERT_PSA_DpOT0_:
  226|  10.2k|    {
  227|  10.2k|        return *reinterpret_cast<
  228|  10.2k|            Value*>(::new(p) Value(
  229|  10.2k|            std::forward<Args>(args)...));
  230|  10.2k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJRlRNS0_11storage_ptrEEEERT_PS8_DpOT0_:
  226|  3.01M|    {
  227|  3.01M|        return *reinterpret_cast<
  228|  3.01M|            Value*>(::new(p) Value(
  229|  3.01M|            std::forward<Args>(args)...));
  230|  3.01M|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJRmRNS0_11storage_ptrEEEERT_PS8_DpOT0_:
  226|  2.33k|    {
  227|  2.33k|        return *reinterpret_cast<
  228|  2.33k|            Value*>(::new(p) Value(
  229|  2.33k|            std::forward<Args>(args)...));
  230|  2.33k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJRdRNS0_11storage_ptrEEEERT_PS8_DpOT0_:
  226|  32.1k|    {
  227|  32.1k|        return *reinterpret_cast<
  228|  32.1k|            Value*>(::new(p) Value(
  229|  32.1k|            std::forward<Args>(args)...));
  230|  32.1k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJRbRNS0_11storage_ptrEEEERT_PS8_DpOT0_:
  226|  4.64k|    {
  227|  4.64k|        return *reinterpret_cast<
  228|  4.64k|            Value*>(::new(p) Value(
  229|  4.64k|            std::forward<Args>(args)...));
  230|  4.64k|    }
_ZN5boost4json6detail6access15construct_valueINS0_5valueEJDnRNS0_11storage_ptrEEEERT_PS7_DpOT0_:
  226|  3.48k|    {
  227|  3.48k|        return *reinterpret_cast<
  228|  3.48k|            Value*>(::new(p) Value(
  229|  3.48k|            std::forward<Args>(args)...));
  230|  3.48k|    }

_ZN5boost4json5array5tableixEm:
   34|  5.05k|    {
   35|  5.05k|        return (reinterpret_cast<
   36|  5.05k|            value*>(this + 1))[pos];
   37|  5.05k|    }
_ZN5boost4json5array4dataEv:
  306|  1.21k|{
  307|  1.21k|    return &(*t_)[0];
  308|  1.21k|}
_ZN5boost4json5array5beginEv:
  347|  1.92k|{
  348|  1.92k|    return &(*t_)[0];
  349|  1.92k|}
_ZN5boost4json5array3endEv:
  371|  1.92k|{
  372|  1.92k|    return &(*t_)[t_->size];
  373|  1.92k|}
_ZN5boost4json5array8max_sizeEv:
  456|  1.21k|{
  457|       |    // max_size depends on the address model
  458|  1.21k|    using min = std::integral_constant<std::size_t,
  459|  1.21k|        (std::size_t(-1) - sizeof(table)) / sizeof(value)>;
  460|  1.21k|    return min::value < BOOST_JSON_MAX_STRUCTURED_SIZE ?
  ------------------
  |  |  230|  1.21k|# define BOOST_JSON_MAX_STRUCTURED_SIZE  0x7ffffffe
  ------------------
  |  Branch (460:12): [Folded - Ignored]
  ------------------
  461|  1.21k|        min::value : BOOST_JSON_MAX_STRUCTURED_SIZE;
  ------------------
  |  |  230|  1.21k|# define BOOST_JSON_MAX_STRUCTURED_SIZE  0x7ffffffe
  ------------------
  462|  1.21k|}

_ZN5boost4json5array5table8allocateEmRKNS0_11storage_ptrE:
   40|  1.21k|{
   41|  1.21k|    BOOST_ASSERT(capacity > 0);
  ------------------
  |  |   60|  1.21k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   42|  1.21k|    if(capacity > array::max_size())
  ------------------
  |  Branch (42:8): [True: 0, False: 1.21k]
  ------------------
   43|      0|    {
   44|      0|        BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION;
  ------------------
  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  ------------------
   45|      0|        detail::throw_system_error( error::array_too_large, &loc );
   46|      0|    }
   47|  1.21k|    auto p = reinterpret_cast<
   48|  1.21k|        table*>(sp->allocate(
   49|  1.21k|            sizeof(table) +
   50|  1.21k|                capacity * sizeof(value),
   51|  1.21k|            alignof(value)));
   52|  1.21k|    p->capacity = static_cast<
   53|  1.21k|        std::uint32_t>(capacity);
   54|  1.21k|    return p;
   55|  1.21k|}
_ZN5boost4json5array5table10deallocateEPS2_RKNS0_11storage_ptrE:
   63|  1.92k|{
   64|  1.92k|    if(p->capacity == 0)
  ------------------
  |  Branch (64:8): [True: 708, False: 1.21k]
  ------------------
   65|    708|        return;
   66|  1.21k|    sp->deallocate(p,
   67|  1.21k|        sizeof(table) +
   68|  1.21k|            p->capacity * sizeof(value),
   69|  1.21k|        alignof(value));
   70|  1.21k|}
_ZN5boost4json5array7destroyEv:
  161|  1.92k|{
  162|  1.92k|    if(sp_.is_not_shared_and_deallocate_is_trivial())
  ------------------
  |  Branch (162:8): [True: 0, False: 1.92k]
  ------------------
  163|      0|        return;
  164|  1.92k|    auto last = end();
  165|  1.92k|    auto const first = begin();
  166|  1.06M|    while(last-- != first)
  ------------------
  |  Branch (166:11): [True: 1.06M, False: 1.92k]
  ------------------
  167|  1.06M|        last->~value();
  168|  1.92k|    table::deallocate(t_, sp_);
  169|  1.92k|}
_ZN5boost4json5arrayC2EONS0_6detail15unchecked_arrayE:
  180|  1.92k|{
  181|  1.92k|    BOOST_STATIC_ASSERT(
  ------------------
  |  |   71|  1.92k|#     define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
  ------------------
  182|  1.92k|        alignof(table) == alignof(value));
  183|  1.92k|    if(ua.size() == 0)
  ------------------
  |  Branch (183:8): [True: 708, False: 1.21k]
  ------------------
  184|    708|    {
  185|    708|        t_ = &empty_;
  186|    708|        return;
  187|    708|    }
  188|  1.21k|    t_= table::allocate(
  189|  1.21k|        ua.size(), sp_);
  190|  1.21k|    t_->size = static_cast<
  191|  1.21k|        std::uint32_t>(ua.size());
  192|  1.21k|    ua.relocate(data());
  193|  1.21k|}
_ZN5boost4json5arrayD2Ev:
  197|  1.92k|{
  198|  1.92k|    destroy();
  199|  1.92k|}

_ZN5boost4json15make_error_codeENS0_5errorE:
  107|  4.73k|{
  108|       |
  109|  4.73k|    return error_code(
  110|  4.73k|        static_cast<std::underlying_type<error>::type>(e),
  111|  4.73k|        detail::error_code_category );
  112|  4.73k|}

_ZNK5boost4json6object5table8is_smallEv:
   61|  5.29k|    {
   62|  5.29k|        return capacity <=
   63|  5.29k|            detail::small_object_size_;
   64|  5.29k|    }
_ZN5boost4json6object5tableixEm:
   69|  1.85M|    {
   70|  1.85M|        return reinterpret_cast<
   71|  1.85M|            key_value_pair*>(
   72|  1.85M|                this + 1)[pos];
   73|  1.85M|    }
_ZN5boost4json6object5table10deallocateEPS2_RKNS0_11storage_ptrE:
  105|  1.50k|    {
  106|  1.50k|        if(p->capacity == 0)
  ------------------
  |  Branch (106:12): [True: 0, False: 1.50k]
  ------------------
  107|      0|            return;
  108|  1.50k|        if(! p->is_small())
  ------------------
  |  Branch (108:12): [True: 352, False: 1.15k]
  ------------------
  109|    352|            sp->deallocate(p,
  110|    352|                sizeof(table) + p->capacity * (
  111|    352|                    sizeof(key_value_pair) +
  112|    352|                    sizeof(index_t)));
  113|  1.15k|        else
  114|  1.15k|            sp->deallocate(p,
  115|  1.15k|                sizeof(table) + p->capacity *
  116|  1.15k|                    sizeof(key_value_pair));
  117|  1.50k|    }
_ZN5boost4json6object5beginEv:
  198|  5.33k|{
  199|  5.33k|    return &(*t_)[0];
  200|  5.33k|}
_ZN5boost4json6object3endEv:
  222|  1.50k|{
  223|  1.50k|    return &(*t_)[t_->size];
  224|  1.50k|}
_ZN5boost4json6detail16unchecked_objectD2Ev:
  521|  14.3k|{
  522|  14.3k|    if(! data_)
  ------------------
  |  Branch (522:8): [True: 1.50k, False: 12.8k]
  ------------------
  523|  1.50k|        return;
  524|  12.8k|    if(sp_.is_not_shared_and_deallocate_is_trivial())
  ------------------
  |  Branch (524:8): [True: 0, False: 12.8k]
  ------------------
  525|      0|        return;
  526|  12.8k|    value* p = data_;
  527|  12.8k|    while(size_--)
  ------------------
  |  Branch (527:11): [True: 0, False: 12.8k]
  ------------------
  528|      0|    {
  529|      0|        p[0].~value();
  530|      0|        p[1].~value();
  531|      0|        p += 2;
  532|      0|    }
  533|  12.8k|}

_ZN5boost4json6detail14find_in_objectINS_4core17basic_string_viewIcEEEENSt3__14pairIPNS0_14key_value_pairEmEERKNS0_6objectET_:
   34|  2.28k|{
   35|  2.28k|    BOOST_ASSERT(obj.t_->capacity > 0);
  ------------------
  |  |   60|  2.28k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   36|  2.28k|    if(obj.t_->is_small())
  ------------------
  |  Branch (36:8): [True: 2.28k, False: 0]
  ------------------
   37|  2.28k|    {
   38|  2.28k|        auto it = &(*obj.t_)[0];
   39|  2.28k|        auto const last =
   40|  2.28k|            &(*obj.t_)[obj.t_->size];
   41|  5.70k|        for(;it != last; ++it)
  ------------------
  |  Branch (41:14): [True: 3.91k, False: 1.79k]
  ------------------
   42|  3.91k|            if( key == it->key() )
  ------------------
  |  Branch (42:17): [True: 490, False: 3.42k]
  ------------------
   43|    490|                return { it, 0 };
   44|  1.79k|        return { nullptr, 0 };
   45|  2.28k|    }
   46|      0|    std::pair<
   47|      0|        key_value_pair*,
   48|      0|        std::size_t> result;
   49|      0|    BOOST_ASSERT(obj.t_->salt != 0);
  ------------------
  |  |   60|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   50|      0|    result.second = detail::digest(key.begin(), key.end(), obj.t_->salt);
   51|      0|    auto i = obj.t_->bucket(
   52|      0|        result.second);
   53|      0|    while(i != object::null_index_)
  ------------------
  |  Branch (53:11): [True: 0, False: 0]
  ------------------
   54|      0|    {
   55|      0|        auto& v = (*obj.t_)[i];
   56|      0|        if( key == v.key() )
  ------------------
  |  Branch (56:13): [True: 0, False: 0]
  ------------------
   57|      0|        {
   58|      0|            result.first = &v;
   59|      0|            return result;
   60|      0|        }
   61|      0|        i = access::next(v);
   62|      0|    }
   63|      0|    result.first = nullptr;
   64|      0|    return result;
   65|      0|}
_ZNK5boost4json6object5table6digestENS_4core17basic_string_viewIcEE:
   87|   920k|{
   88|   920k|    BOOST_ASSERT(salt != 0);
  ------------------
  |  |   60|   920k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   89|   920k|    return detail::digest(
   90|   920k|        key.begin(), key.end(), salt);
   91|   920k|}
_ZN5boost4json6objectC2EONS0_6detail16unchecked_objectE:
  203|  14.3k|{
  204|  14.3k|    if(uo.size() == 0)
  ------------------
  |  Branch (204:8): [True: 12.8k, False: 1.50k]
  ------------------
  205|  12.8k|    {
  206|  12.8k|        t_ = &empty_;
  207|  12.8k|        return;
  208|  12.8k|    }
  209|       |    // should already be checked
  210|  1.50k|    BOOST_ASSERT(
  ------------------
  |  |   60|  1.50k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  211|  1.50k|        uo.size() <= max_size());
  212|  1.50k|    t_ = table::allocate(
  213|  1.50k|        uo.size(), 0, sp_);
  214|       |
  215|       |    // insert all elements, keeping
  216|       |    // the last of any duplicate keys.
  217|  1.50k|    auto dest = begin();
  218|  1.50k|    auto src = uo.release();
  219|  1.50k|    auto const end = src + 2 * uo.size();
  220|  1.50k|    if(t_->is_small())
  ------------------
  |  Branch (220:8): [True: 1.15k, False: 352]
  ------------------
  221|  1.15k|    {
  222|  1.15k|        t_->size = 0;
  223|  3.43k|        while(src != end)
  ------------------
  |  Branch (223:15): [True: 2.28k, False: 1.15k]
  ------------------
  224|  2.28k|        {
  225|  2.28k|            access::construct_key_value_pair(
  226|  2.28k|                dest, pilfer(src[0]), pilfer(src[1]));
  227|  2.28k|            src += 2;
  228|  2.28k|            auto result = detail::find_in_object(*this, dest->key());
  229|  2.28k|            if(! result.first)
  ------------------
  |  Branch (229:16): [True: 1.79k, False: 490]
  ------------------
  230|  1.79k|            {
  231|  1.79k|                ++dest;
  232|  1.79k|                ++t_->size;
  233|  1.79k|                continue;
  234|  1.79k|            }
  235|       |            // handle duplicate
  236|    490|            auto& v = *result.first;
  237|       |            // don't bother to check if
  238|       |            // storage deallocate is trivial
  239|    490|            v.~key_value_pair();
  240|       |            // trivial relocate
  241|    490|            std::memcpy(
  242|    490|                static_cast<void*>(&v),
  243|    490|                    dest, sizeof(v));
  244|    490|        }
  245|  1.15k|        return;
  246|  1.15k|    }
  247|   920k|    while(src != end)
  ------------------
  |  Branch (247:11): [True: 920k, False: 352]
  ------------------
  248|   920k|    {
  249|   920k|        access::construct_key_value_pair(
  250|   920k|            dest, pilfer(src[0]), pilfer(src[1]));
  251|   920k|        src += 2;
  252|   920k|        auto& head = t_->bucket(dest->key());
  253|   920k|        auto i = head;
  254|   920k|        for(;;)
  255|   921k|        {
  256|   921k|            if(i == null_index_)
  ------------------
  |  Branch (256:16): [True: 1.97k, False: 919k]
  ------------------
  257|  1.97k|            {
  258|       |                // end of bucket
  259|  1.97k|                access::next(
  260|  1.97k|                    *dest) = head;
  261|  1.97k|                head = static_cast<index_t>(
  262|  1.97k|                    dest - begin());
  263|  1.97k|                ++dest;
  264|  1.97k|                break;
  265|  1.97k|            }
  266|   919k|            auto& v = (*t_)[i];
  267|   919k|            if(v.key() != dest->key())
  ------------------
  |  Branch (267:16): [True: 690, False: 918k]
  ------------------
  268|    690|            {
  269|    690|                i = access::next(v);
  270|    690|                continue;
  271|    690|            }
  272|       |
  273|       |            // handle duplicate
  274|   918k|            access::next(*dest) =
  275|   918k|                access::next(v);
  276|       |            // don't bother to check if
  277|       |            // storage deallocate is trivial
  278|   918k|            v.~key_value_pair();
  279|       |            // trivial relocate
  280|   918k|            std::memcpy(
  281|   918k|                static_cast<void*>(&v),
  282|   918k|                    dest, sizeof(v));
  283|   918k|            break;
  284|   919k|        }
  285|   920k|    }
  286|    352|    t_->size = static_cast<
  287|    352|        index_t>(dest - begin());
  288|    352|}
_ZN5boost4json6objectD2Ev:
  292|  14.3k|{
  293|  14.3k|    if(sp_.is_not_shared_and_deallocate_is_trivial())
  ------------------
  |  Branch (293:8): [True: 0, False: 14.3k]
  ------------------
  294|      0|        return;
  295|  14.3k|    if(t_->capacity == 0)
  ------------------
  |  Branch (295:8): [True: 12.8k, False: 1.50k]
  ------------------
  296|  12.8k|        return;
  297|  1.50k|    destroy();
  298|  1.50k|}
_ZN5boost4json6object5table6bucketEm:
   97|   920k|{
   98|   920k|    return reinterpret_cast<
   99|   920k|        index_t*>(&(*this)[capacity])[
  100|   920k|            hash % capacity];
  101|   920k|}
_ZN5boost4json6object5table8allocateEmmRKNS0_11storage_ptrE:
  130|  1.50k|{
  131|  1.50k|    BOOST_STATIC_ASSERT(
  ------------------
  |  |   71|  1.50k|#     define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
  ------------------
  132|  1.50k|        alignof(key_value_pair) >=
  133|  1.50k|        alignof(index_t));
  134|  1.50k|    BOOST_ASSERT(capacity > 0);
  ------------------
  |  |   60|  1.50k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  135|  1.50k|    BOOST_ASSERT(capacity <= max_size());
  ------------------
  |  |   60|  1.50k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  136|  1.50k|    table* p;
  137|  1.50k|    if(capacity <= detail::small_object_size_)
  ------------------
  |  Branch (137:8): [True: 1.15k, False: 352]
  ------------------
  138|  1.15k|    {
  139|  1.15k|        p = reinterpret_cast<
  140|  1.15k|            table*>(sp->allocate(
  141|  1.15k|                sizeof(table) + capacity *
  142|  1.15k|                    sizeof(key_value_pair)));
  143|  1.15k|        p->capacity = static_cast<
  144|  1.15k|            std::uint32_t>(capacity);
  145|  1.15k|    }
  146|    352|    else
  147|    352|    {
  148|    352|        p = reinterpret_cast<
  149|    352|            table*>(sp->allocate(
  150|    352|                sizeof(table) + capacity * (
  151|    352|                    sizeof(key_value_pair) +
  152|    352|                    sizeof(index_t))));
  153|    352|        p->capacity = static_cast<
  154|    352|            std::uint32_t>(capacity);
  155|    352|        p->clear();
  156|    352|    }
  157|  1.50k|    if(salt)
  ------------------
  |  Branch (157:8): [True: 0, False: 1.50k]
  ------------------
  158|      0|    {
  159|      0|        p->salt = salt;
  160|      0|    }
  161|  1.50k|    else
  162|  1.50k|    {
  163|       |        // VFALCO This would be better if it
  164|       |        //        was random, but maybe this
  165|       |        //        is good enough.
  166|  1.50k|        p->salt = reinterpret_cast<
  167|  1.50k|            std::uintptr_t>(p);
  168|  1.50k|    }
  169|  1.50k|    return p;
  170|  1.50k|}
_ZN5boost4json6object5table6bucketENS_4core17basic_string_viewIcEE:
  107|   920k|{
  108|   920k|    return bucket(digest(key));
  109|   920k|}
_ZN5boost4json6object5table5clearEv:
  114|    352|{
  115|    352|    BOOST_ASSERT(! is_small());
  ------------------
  |  |   60|    352|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  116|       |    // initialize buckets
  117|    352|    std::memset(
  118|    352|        reinterpret_cast<index_t*>(
  119|    352|            &(*this)[capacity]),
  120|    352|        0xff, // null_index_
  121|    352|        capacity * sizeof(index_t));
  122|    352|}
_ZN5boost4json6object7destroyEv:
  828|  1.50k|{
  829|  1.50k|    BOOST_ASSERT(t_->capacity > 0);
  ------------------
  |  |   60|  1.50k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  830|  1.50k|    BOOST_ASSERT(! sp_.is_not_shared_and_deallocate_is_trivial());
  ------------------
  |  |   60|  1.50k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  831|  1.50k|    destroy(begin(), end());
  832|  1.50k|    table::deallocate(t_, sp_);
  833|  1.50k|}
_ZN5boost4json6object7destroyEPNS0_14key_value_pairES3_:
  840|  1.50k|{
  841|  1.50k|    BOOST_ASSERT(! sp_.is_not_shared_and_deallocate_is_trivial());
  ------------------
  |  |   60|  1.50k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  842|  5.27k|    while(last != first)
  ------------------
  |  Branch (842:11): [True: 3.77k, False: 1.50k]
  ------------------
  843|  3.77k|        (--last)->~key_value_pair();
  844|  1.50k|}

_ZN5boost4json5parseENS_4core17basic_string_viewIcEERNS_6system10error_codeENS0_11storage_ptrERKNS0_13parse_optionsE:
   29|  6.85k|{
   30|  6.85k|    unsigned char temp[
   31|  6.85k|        BOOST_JSON_STACK_BUFFER_SIZE];
   32|  6.85k|    parser p(storage_ptr(), opt, temp);
   33|  6.85k|    p.reset(std::move(sp));
   34|  6.85k|    p.write(s, ec);
   35|  6.85k|    if(ec)
  ------------------
  |  Branch (35:8): [True: 4.73k, False: 2.11k]
  ------------------
   36|  4.73k|        return nullptr;
   37|  2.11k|    return p.release();
   38|  6.85k|}

_ZN5boost4json6parserC2ENS0_11storage_ptrERKNS0_13parse_optionsEPhm:
   34|  6.85k|{
   35|  6.85k|    reset();
   36|  6.85k|}
_ZN5boost4json6parser5resetENS0_11storage_ptrE:
   54|  13.7k|{
   55|  13.7k|    p_.reset();
   56|  13.7k|    p_.handler().st.reset(sp);
   57|  13.7k|}
_ZN5boost4json6parser10write_someEPKcmRNS_6system10error_codeE:
   65|  6.85k|{
   66|  6.85k|    auto const n = p_.write_some(
   67|  6.85k|        false, data, size, ec);
   68|  6.85k|    BOOST_ASSERT(ec || p_.done());
  ------------------
  |  |   60|  6.85k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
   69|  6.85k|    return n;
   70|  6.85k|}
_ZN5boost4json6parser5writeEPKcmRNS_6system10error_codeE:
  105|  6.85k|{
  106|  6.85k|    auto const n = write_some(
  107|  6.85k|        data, size, ec);
  108|  6.85k|    if(! ec && n < size)
  ------------------
  |  Branch (108:8): [True: 2.60k, False: 4.24k]
  |  Branch (108:16): [True: 489, False: 2.11k]
  ------------------
  109|    489|    {
  110|    489|        BOOST_JSON_FAIL(ec, error::extra_data);
  ------------------
  |  |   20|    489|    BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION; \
  |  |  ------------------
  |  |  |  |  170|    489|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  |  |   21|    489|    (ec).assign(e, &loc);
  ------------------
  111|    489|        p_.fail(ec);
  112|    489|    }
  113|  6.85k|    return n;
  114|  6.85k|}
_ZN5boost4json6parser7releaseEv:
  146|  2.11k|{
  147|  2.11k|    if( ! p_.done())
  ------------------
  |  Branch (147:9): [True: 0, False: 2.11k]
  ------------------
  148|      0|    {
  149|       |        // prevent undefined behavior
  150|      0|        if(! p_.last_error())
  ------------------
  |  Branch (150:12): [True: 0, False: 0]
  ------------------
  151|      0|        {
  152|      0|            error_code ec;
  153|      0|            BOOST_JSON_FAIL(ec, error::incomplete);
  ------------------
  |  |   20|      0|    BOOST_STATIC_CONSTEXPR source_location loc = BOOST_CURRENT_LOCATION; \
  |  |  ------------------
  |  |  |  |  170|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  |  |   21|      0|    (ec).assign(e, &loc);
  ------------------
  154|      0|            p_.fail(ec);
  155|      0|        }
  156|      0|        detail::throw_system_error(
  157|      0|            p_.last_error());
  158|      0|    }
  159|  2.11k|    return p_.handler().st.release();
  160|  2.11k|}

_ZN5boost4json6stringC2ERKNS0_6detail5key_tENS_4core17basic_string_viewIcEENS0_11storage_ptrE:
   26|  1.02M|{
   27|  1.02M|}
_ZN5boost4json6stringC2ERKNS0_6detail5key_tENS_4core17basic_string_viewIcEES8_NS0_11storage_ptrE:
   38|  1.59k|{
   39|  1.59k|}

_ZN5boost4json6stringC2ENS_4core17basic_string_viewIcEENS0_11storage_ptrE:
   89|  20.5k|{
   90|  20.5k|    assign(s);
   91|  20.5k|}
_ZN5boost4json6string6assignEPKcm:
  178|  20.5k|{
  179|  20.5k|    std::char_traits<char>::copy(
  180|  20.5k|        impl_.assign(count, sp_),
  181|  20.5k|        s, count);
  182|  20.5k|    return *this;
  183|  20.5k|}
_ZN5boost4json6string12reserve_implEm:
  401|    883|{
  402|    883|    BOOST_ASSERT(
  ------------------
  |  |   60|    883|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  403|    883|        new_cap >= impl_.capacity());
  404|    883|    if(new_cap > impl_.capacity())
  ------------------
  |  Branch (404:8): [True: 883, False: 0]
  ------------------
  405|    883|    {
  406|       |        // grow
  407|    883|        new_cap = detail::string_impl::growth(
  408|    883|            new_cap, impl_.capacity());
  409|    883|        detail::string_impl tmp(new_cap, sp_);
  410|    883|        std::char_traits<char>::copy(tmp.data(),
  411|    883|            impl_.data(), impl_.size() + 1);
  412|    883|        tmp.size(impl_.size());
  413|    883|        impl_.destroy(sp_);
  414|    883|        impl_ = tmp;
  415|    883|        return;
  416|    883|    }
  417|    883|}

_ZN5boost4json5valueD2Ev:
   82|  3.20M|{
   83|  3.20M|    switch(kind())
  ------------------
  |  Branch (83:12): [True: 0, False: 3.20M]
  ------------------
   84|  3.20M|    {
   85|  8.22k|    case json::kind::null:
  ------------------
  |  Branch (85:5): [True: 8.22k, False: 3.20M]
  ------------------
   86|  12.8k|    case json::kind::bool_:
  ------------------
  |  Branch (86:5): [True: 4.64k, False: 3.20M]
  ------------------
   87|  3.02M|    case json::kind::int64:
  ------------------
  |  Branch (87:5): [True: 3.01M, False: 197k]
  ------------------
   88|  3.02M|    case json::kind::uint64:
  ------------------
  |  Branch (88:5): [True: 2.33k, False: 3.20M]
  ------------------
   89|  3.05M|    case json::kind::double_:
  ------------------
  |  Branch (89:5): [True: 32.1k, False: 3.17M]
  ------------------
   90|  3.05M|        sca_.~scalar();
   91|  3.05M|        break;
   92|       |
   93|   134k|    case json::kind::string:
  ------------------
  |  Branch (93:5): [True: 134k, False: 3.07M]
  ------------------
   94|   134k|        str_.~string();
   95|   134k|        break;
   96|       |
   97|  1.92k|    case json::kind::array:
  ------------------
  |  Branch (97:5): [True: 1.92k, False: 3.20M]
  ------------------
   98|  1.92k|        arr_.~array();
   99|  1.92k|        break;
  100|       |
  101|  14.3k|    case json::kind::object:
  ------------------
  |  Branch (101:5): [True: 14.3k, False: 3.19M]
  ------------------
  102|  14.3k|        obj_.~object();
  103|  14.3k|        break;
  104|  3.20M|    }
  105|  3.20M|}
_ZN5boost4json14key_value_pairC2ENS0_8pilferedINS0_5valueEEES4_:
  640|   922k|{
  641|   922k|    std::size_t len;
  642|   922k|    key_ = access::release_key(key.get(), len);
  643|   922k|    len_ = static_cast<std::uint32_t>(len);
  644|   922k|}

_ZN5boost4json11value_stackD2Ev:
  305|  6.85k|{
  306|       |    // default dtor is here so the
  307|       |    // definition goes in the library
  308|       |    // instead of the caller's TU.
  309|  6.85k|}
_ZN5boost4json11value_stackC2ENS0_11storage_ptrEPhm:
  320|  6.85k|{
  321|  6.85k|}
_ZN5boost4json11value_stack5resetENS0_11storage_ptrE:
  326|  13.7k|{
  327|  13.7k|    st_.clear();
  328|       |
  329|  13.7k|    sp_.~storage_ptr();
  330|  13.7k|    ::new(&sp_) storage_ptr(
  331|  13.7k|        pilfer(sp));
  332|       |
  333|       |    // `stack` needs this
  334|       |    // to clean up correctly
  335|  13.7k|    st_.run_dtors(
  336|  13.7k|        ! sp_.is_not_shared_and_deallocate_is_trivial());
  337|  13.7k|}
_ZN5boost4json11value_stack7releaseEv:
  342|  2.11k|{
  343|       |    // This means the caller did not
  344|       |    // cause a single top level element
  345|       |    // to be produced.
  346|  2.11k|    BOOST_ASSERT(st_.size() == 1);
  ------------------
  |  |   60|  2.11k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  347|       |
  348|       |    // give up shared ownership
  349|  2.11k|    sp_ = {};
  350|       |
  351|  2.11k|    return pilfer(*st_.release(1));
  352|  2.11k|}
_ZN5boost4json11value_stack10push_arrayEm:
  359|  1.92k|{
  360|       |    // we already have room if n > 0
  361|  1.92k|    if(BOOST_JSON_UNLIKELY(n == 0))
  ------------------
  |  |  179|  1.92k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 708, False: 1.21k]
  |  |  ------------------
  ------------------
  362|    708|        st_.maybe_grow();
  363|  1.92k|    detail::unchecked_array ua(
  364|  1.92k|        st_.release(n), n, sp_);
  365|  1.92k|    st_.exchange(std::move(ua));
  366|  1.92k|}
_ZN5boost4json11value_stack11push_objectEm:
  371|  14.3k|{
  372|       |    // we already have room if n > 0
  373|  14.3k|    if(BOOST_JSON_UNLIKELY(n == 0))
  ------------------
  |  |  179|  14.3k|#  define BOOST_JSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (179:34): [True: 12.8k, False: 1.50k]
  |  |  ------------------
  ------------------
  374|  12.8k|        st_.maybe_grow();
  375|  14.3k|    detail::unchecked_object uo(
  376|  14.3k|        st_.release(n * 2), n, sp_);
  377|  14.3k|    st_.exchange(std::move(uo));
  378|  14.3k|}
_ZN5boost4json11value_stack10push_charsENS_4core17basic_string_viewIcEE:
  384|  19.9k|{
  385|  19.9k|    st_.append(s);
  386|  19.9k|}
_ZN5boost4json11value_stack8push_keyENS_4core17basic_string_viewIcEE:
  392|  1.02M|{
  393|  1.02M|    if(! st_.has_chars())
  ------------------
  |  Branch (393:8): [True: 1.02M, False: 1.59k]
  ------------------
  394|  1.02M|    {
  395|  1.02M|        st_.push(detail::key_t{}, s, sp_);
  396|  1.02M|        return;
  397|  1.02M|    }
  398|  1.59k|    auto part = st_.release_string();
  399|  1.59k|    st_.push(detail::key_t{}, part, s, sp_);
  400|  1.59k|}
_ZN5boost4json11value_stack11push_stringENS_4core17basic_string_viewIcEE:
  406|  30.7k|{
  407|  30.7k|    if(! st_.has_chars())
  ------------------
  |  Branch (407:8): [True: 20.5k, False: 10.2k]
  ------------------
  408|  20.5k|    {
  409|       |        // fast path
  410|  20.5k|        st_.push(s, sp_);
  411|  20.5k|        return;
  412|  20.5k|    }
  413|       |
  414|       |    // VFALCO We could add a special
  415|       |    // private ctor to string that just
  416|       |    // creates uninitialized space,
  417|       |    // to reduce member function calls.
  418|  10.2k|    auto part = st_.release_string();
  419|  10.2k|    auto& str = st_.push(
  420|  10.2k|        string_kind, sp_).get_string();
  421|  10.2k|    str.reserve(
  422|  10.2k|        part.size() + s.size());
  423|  10.2k|    std::memcpy(
  424|  10.2k|        str.data(),
  425|  10.2k|        part.data(), part.size());
  426|  10.2k|    std::memcpy(
  427|  10.2k|        str.data() + part.size(),
  428|  10.2k|        s.data(), s.size());
  429|  10.2k|    str.grow(part.size() + s.size());
  430|  10.2k|}
_ZN5boost4json11value_stack10push_int64El:
  436|  3.01M|{
  437|  3.01M|    st_.push(i, sp_);
  438|  3.01M|}
_ZN5boost4json11value_stack11push_uint64Em:
  444|  2.33k|{
  445|  2.33k|    st_.push(u, sp_);
  446|  2.33k|}
_ZN5boost4json11value_stack11push_doubleEd:
  452|  32.1k|{
  453|  32.1k|    st_.push(d, sp_);
  454|  32.1k|}
_ZN5boost4json11value_stack9push_boolEb:
  460|  4.64k|{
  461|  4.64k|    st_.push(b, sp_);
  462|  4.64k|}
_ZN5boost4json11value_stack9push_nullEv:
  467|  3.48k|{
  468|  3.48k|    st_.push(nullptr, sp_);
  469|  3.48k|}
_ZN5boost4json11value_stack5stackD2Ev:
   26|  6.85k|{
   27|  6.85k|    clear();
   28|  6.85k|    if( begin_ != temp_ &&
  ------------------
  |  Branch (28:9): [True: 551, False: 6.30k]
  ------------------
   29|  6.85k|        begin_ != nullptr)
  ------------------
  |  Branch (29:9): [True: 551, False: 0]
  ------------------
   30|    551|        sp_->deallocate(
   31|    551|            begin_,
   32|    551|            (end_ - begin_) *
   33|    551|                sizeof(value));
   34|  6.85k|}
_ZN5boost4json11value_stack5stackC2ENS0_11storage_ptrEPvm:
   44|  6.85k|{
   45|  6.85k|    if(size >= min_size_ *
  ------------------
  |  Branch (45:8): [True: 6.85k, False: 0]
  ------------------
   46|  6.85k|        sizeof(value))
   47|  6.85k|    {
   48|  6.85k|        begin_ = reinterpret_cast<
   49|  6.85k|            value*>(temp);
   50|  6.85k|        top_ = begin_;
   51|  6.85k|        end_ = begin_ +
   52|  6.85k|            size / sizeof(value);
   53|  6.85k|    }
   54|      0|    else
   55|      0|    {
   56|      0|        begin_ = nullptr;
   57|      0|        top_ = nullptr;
   58|      0|        end_ = nullptr;
   59|      0|    }
   60|  6.85k|}
_ZN5boost4json11value_stack5stack5clearEv:
   94|  20.5k|{
   95|  20.5k|    if(top_ != begin_)
  ------------------
  |  Branch (95:8): [True: 2.42k, False: 18.1k]
  ------------------
   96|  2.42k|    {
   97|  2.42k|        if(run_dtors_)
  ------------------
  |  Branch (97:12): [True: 2.42k, False: 0]
  ------------------
   98|  2.42k|            for(auto it = top_;
   99|  1.21M|                it-- != begin_;)
  ------------------
  |  Branch (99:17): [True: 1.21M, False: 2.42k]
  ------------------
  100|  1.21M|                it->~value();
  101|  2.42k|        top_ = begin_;
  102|  2.42k|    }
  103|  20.5k|    chars_ = 0;
  104|  20.5k|}
_ZN5boost4json11value_stack5stack9run_dtorsEb:
   66|  13.7k|{
   67|  13.7k|    run_dtors_ = b;
   68|  13.7k|}
_ZN5boost4json11value_stack5stack7releaseEm:
  252|  18.3k|{
  253|  18.3k|    BOOST_ASSERT(n <= size());
  ------------------
  |  |   60|  18.3k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  254|  18.3k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  18.3k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  255|  18.3k|    top_ -= n;
  256|  18.3k|    return top_;
  257|  18.3k|}
_ZN5boost4json11value_stack5stack10maybe_growEv:
  110|  13.5k|{
  111|  13.5k|    if(top_ >= end_)
  ------------------
  |  Branch (111:8): [True: 37, False: 13.4k]
  ------------------
  112|     37|        grow_one();
  113|  13.5k|}
_ZN5boost4json11value_stack5stack8grow_oneEv:
  120|    768|{
  121|    768|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|    768|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  122|    768|    std::size_t const capacity =
  123|    768|        end_ - begin_;
  124|    768|    std::size_t new_cap = min_size_;
  125|       |    // VFALCO check overflow here
  126|  6.06k|    while(new_cap < capacity + 1)
  ------------------
  |  Branch (126:11): [True: 5.29k, False: 768]
  ------------------
  127|  5.29k|        new_cap <<= 1;
  128|    768|    auto const begin =
  129|    768|        reinterpret_cast<value*>(
  130|    768|            sp_->allocate(
  131|    768|                new_cap * sizeof(value)));
  132|    768|    if(begin_)
  ------------------
  |  Branch (132:8): [True: 768, False: 0]
  ------------------
  133|    768|    {
  134|    768|        std::memcpy(
  135|    768|            reinterpret_cast<char*>(begin),
  136|    768|            reinterpret_cast<char*>(begin_),
  137|    768|            size() * sizeof(value));
  138|    768|        if(begin_ != temp_)
  ------------------
  |  Branch (138:12): [True: 606, False: 162]
  ------------------
  139|    606|            sp_->deallocate(begin_,
  140|    606|                capacity * sizeof(value));
  141|    768|    }
  142|       |    // book-keeping
  143|    768|    top_ = begin + (top_ - begin_);
  144|    768|    end_ = begin + new_cap;
  145|    768|    begin_ = begin;
  146|    768|}
_ZNK5boost4json11value_stack5stack4sizeEv:
   74|  2.59k|{
   75|  2.59k|    return top_ - begin_;
   76|  2.59k|}
_ZN5boost4json11value_stack5stack6appendENS_4core17basic_string_viewIcEE:
  199|  19.9k|{
  200|  19.9k|    std::size_t const bytes_avail =
  201|  19.9k|        reinterpret_cast<
  202|  19.9k|            char const*>(end_) -
  203|  19.9k|        reinterpret_cast<
  204|  19.9k|            char const*>(top_);
  205|       |    // make sure there is room for
  206|       |    // pushing one more value without
  207|       |    // clobbering the string.
  208|  19.9k|    if(sizeof(value) + chars_ +
  ------------------
  |  Branch (208:8): [True: 911, False: 19.0k]
  ------------------
  209|  19.9k|            s.size() > bytes_avail)
  210|    911|        grow(s.size());
  211|       |
  212|       |    // copy the new piece
  213|  19.9k|    std::memcpy(
  214|  19.9k|        reinterpret_cast<char*>(
  215|  19.9k|            top_ + 1) + chars_,
  216|  19.9k|        s.data(), s.size());
  217|  19.9k|    chars_ += s.size();
  218|       |
  219|       |    // ensure a pushed value cannot
  220|       |    // clobber the released string.
  221|  19.9k|    BOOST_ASSERT(
  ------------------
  |  |   60|  19.9k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  222|  19.9k|        reinterpret_cast<char*>(
  223|  19.9k|            top_ + 1) + chars_ <=
  224|  19.9k|        reinterpret_cast<char*>(
  225|  19.9k|            end_));
  226|  19.9k|}
_ZN5boost4json11value_stack5stack4growEm:
  153|    911|{
  154|       |    // needed capacity in values
  155|    911|    std::size_t const needed =
  156|    911|        size() +
  157|    911|        1 +
  158|    911|        ((chars_ + nchars +
  159|    911|            sizeof(value) - 1) /
  160|    911|                sizeof(value));
  161|    911|    std::size_t const capacity =
  162|    911|        end_ - begin_;
  163|    911|    BOOST_ASSERT(
  ------------------
  |  |   60|    911|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  164|    911|        needed > capacity);
  165|    911|    std::size_t new_cap = min_size_;
  166|       |    // VFALCO check overflow here
  167|  6.48k|    while(new_cap < needed)
  ------------------
  |  Branch (167:11): [True: 5.57k, False: 911]
  ------------------
  168|  5.57k|        new_cap <<= 1;
  169|    911|    auto const begin =
  170|    911|        reinterpret_cast<value*>(
  171|    911|            sp_->allocate(
  172|    911|                new_cap * sizeof(value)));
  173|    911|    if(begin_)
  ------------------
  |  Branch (173:8): [True: 911, False: 0]
  ------------------
  174|    911|    {
  175|    911|        std::size_t amount =
  176|    911|            size() * sizeof(value);
  177|    911|        if(chars_ > 0)
  ------------------
  |  Branch (177:12): [True: 644, False: 267]
  ------------------
  178|    644|            amount += sizeof(value) + chars_;
  179|    911|        std::memcpy(
  180|    911|            reinterpret_cast<char*>(begin),
  181|    911|            reinterpret_cast<char*>(begin_),
  182|    911|            amount);
  183|    911|        if(begin_ != temp_)
  ------------------
  |  Branch (183:12): [True: 522, False: 389]
  ------------------
  184|    522|            sp_->deallocate(begin_,
  185|    522|                capacity * sizeof(value));
  186|    911|    }
  187|       |    // book-keeping
  188|    911|    top_ = begin + (top_ - begin_);
  189|    911|    end_ = begin + new_cap;
  190|    911|    begin_ = begin;
  191|    911|}
_ZN5boost4json11value_stack5stack9has_charsEv:
   82|  1.05M|{
   83|  1.05M|    return chars_ != 0;
   84|  1.05M|}
_ZN5boost4json11value_stack5stack14release_stringEv:
  232|  11.7k|{
  233|       |    // ensure a pushed value cannot
  234|       |    // clobber the released string.
  235|  11.7k|    BOOST_ASSERT(
  ------------------
  |  |   60|  11.7k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  236|  11.7k|        reinterpret_cast<char*>(
  237|  11.7k|            top_ + 1) + chars_ <=
  238|  11.7k|        reinterpret_cast<char*>(
  239|  11.7k|            end_));
  240|  11.7k|    auto const n = chars_;
  241|  11.7k|    chars_ = 0;
  242|  11.7k|    return { reinterpret_cast<
  243|  11.7k|        char const*>(top_ + 1), n };
  244|  11.7k|}
_ZN5boost4json11value_stack5stack8exchangeINS0_6detail15unchecked_arrayEEEvOT_:
  280|  1.92k|{
  281|  1.92k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  1.92k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  282|  1.92k|    union U
  283|  1.92k|    {
  284|  1.92k|        value v;
  285|  1.92k|        U() {}
  286|  1.92k|        ~U() {}
  287|  1.92k|    } jv;
  288|       |    // construct value on the stack
  289|       |    // to avoid clobbering top_[0],
  290|       |    // which belongs to `u`.
  291|  1.92k|    detail::access::
  292|  1.92k|        construct_value(
  293|  1.92k|            &jv.v, std::move(u));
  294|  1.92k|    std::memcpy(
  295|  1.92k|        reinterpret_cast<
  296|  1.92k|            char*>(top_),
  297|  1.92k|        &jv.v, sizeof(value));
  298|  1.92k|    ++top_;
  299|  1.92k|}
_ZZN5boost4json11value_stack5stack8exchangeINS0_6detail15unchecked_arrayEEEvOT_EN1UC2Ev:
  285|  1.92k|        U() {}
_ZZN5boost4json11value_stack5stack8exchangeINS0_6detail15unchecked_arrayEEEvOT_EN1UD2Ev:
  286|  1.92k|        ~U() {}
_ZN5boost4json11value_stack5stack8exchangeINS0_6detail16unchecked_objectEEEvOT_:
  280|  14.3k|{
  281|  14.3k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  14.3k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  282|  14.3k|    union U
  283|  14.3k|    {
  284|  14.3k|        value v;
  285|  14.3k|        U() {}
  286|  14.3k|        ~U() {}
  287|  14.3k|    } jv;
  288|       |    // construct value on the stack
  289|       |    // to avoid clobbering top_[0],
  290|       |    // which belongs to `u`.
  291|  14.3k|    detail::access::
  292|  14.3k|        construct_value(
  293|  14.3k|            &jv.v, std::move(u));
  294|  14.3k|    std::memcpy(
  295|  14.3k|        reinterpret_cast<
  296|  14.3k|            char*>(top_),
  297|  14.3k|        &jv.v, sizeof(value));
  298|  14.3k|    ++top_;
  299|  14.3k|}
_ZZN5boost4json11value_stack5stack8exchangeINS0_6detail16unchecked_objectEEEvOT_EN1UC2Ev:
  285|  14.3k|        U() {}
_ZZN5boost4json11value_stack5stack8exchangeINS0_6detail16unchecked_objectEEEvOT_EN1UD2Ev:
  286|  14.3k|        ~U() {}
_ZN5boost4json11value_stack5stack4pushIJNS0_6detail5key_tERNS_4core17basic_string_viewIcEERNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  1.02M|{
  265|  1.02M|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  1.02M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  1.02M|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 118, False: 1.02M]
  ------------------
  267|    118|        grow_one();
  268|  1.02M|    value& jv = detail::access::
  269|  1.02M|        construct_value(top_,
  270|  1.02M|            std::forward<Args>(args)...);
  271|  1.02M|    ++top_;
  272|  1.02M|    return jv;
  273|  1.02M|}
_ZN5boost4json11value_stack5stack4pushIJNS0_6detail5key_tERNS_4core17basic_string_viewIcEES9_RNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  1.59k|{
  265|  1.59k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  1.59k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  1.59k|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 0, False: 1.59k]
  ------------------
  267|      0|        grow_one();
  268|  1.59k|    value& jv = detail::access::
  269|  1.59k|        construct_value(top_,
  270|  1.59k|            std::forward<Args>(args)...);
  271|  1.59k|    ++top_;
  272|  1.59k|    return jv;
  273|  1.59k|}
_ZN5boost4json11value_stack5stack4pushIJRNS_4core17basic_string_viewIcEERNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  20.5k|{
  265|  20.5k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  20.5k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  20.5k|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 36, False: 20.5k]
  ------------------
  267|     36|        grow_one();
  268|  20.5k|    value& jv = detail::access::
  269|  20.5k|        construct_value(top_,
  270|  20.5k|            std::forward<Args>(args)...);
  271|  20.5k|    ++top_;
  272|  20.5k|    return jv;
  273|  20.5k|}
_ZN5boost4json11value_stack5stack4pushIJRKNS0_13string_kind_tERNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  10.2k|{
  265|  10.2k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  10.2k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  10.2k|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 0, False: 10.2k]
  ------------------
  267|      0|        grow_one();
  268|  10.2k|    value& jv = detail::access::
  269|  10.2k|        construct_value(top_,
  270|  10.2k|            std::forward<Args>(args)...);
  271|  10.2k|    ++top_;
  272|  10.2k|    return jv;
  273|  10.2k|}
_ZN5boost4json11value_stack5stack4pushIJRlRNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  3.01M|{
  265|  3.01M|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  3.01M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  3.01M|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 408, False: 3.01M]
  ------------------
  267|    408|        grow_one();
  268|  3.01M|    value& jv = detail::access::
  269|  3.01M|        construct_value(top_,
  270|  3.01M|            std::forward<Args>(args)...);
  271|  3.01M|    ++top_;
  272|  3.01M|    return jv;
  273|  3.01M|}
_ZN5boost4json11value_stack5stack4pushIJRmRNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  2.33k|{
  265|  2.33k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  2.33k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  2.33k|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 42, False: 2.28k]
  ------------------
  267|     42|        grow_one();
  268|  2.33k|    value& jv = detail::access::
  269|  2.33k|        construct_value(top_,
  270|  2.33k|            std::forward<Args>(args)...);
  271|  2.33k|    ++top_;
  272|  2.33k|    return jv;
  273|  2.33k|}
_ZN5boost4json11value_stack5stack4pushIJRdRNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  32.1k|{
  265|  32.1k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  32.1k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  32.1k|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 49, False: 32.0k]
  ------------------
  267|     49|        grow_one();
  268|  32.1k|    value& jv = detail::access::
  269|  32.1k|        construct_value(top_,
  270|  32.1k|            std::forward<Args>(args)...);
  271|  32.1k|    ++top_;
  272|  32.1k|    return jv;
  273|  32.1k|}
_ZN5boost4json11value_stack5stack4pushIJRbRNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  4.64k|{
  265|  4.64k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  4.64k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  4.64k|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 37, False: 4.60k]
  ------------------
  267|     37|        grow_one();
  268|  4.64k|    value& jv = detail::access::
  269|  4.64k|        construct_value(top_,
  270|  4.64k|            std::forward<Args>(args)...);
  271|  4.64k|    ++top_;
  272|  4.64k|    return jv;
  273|  4.64k|}
_ZN5boost4json11value_stack5stack4pushIJDnRNS0_11storage_ptrEEEERNS0_5valueEDpOT_:
  264|  3.48k|{
  265|  3.48k|    BOOST_ASSERT(chars_ == 0);
  ------------------
  |  |   60|  3.48k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  266|  3.48k|    if(top_ >= end_)
  ------------------
  |  Branch (266:8): [True: 41, False: 3.44k]
  ------------------
  267|     41|        grow_one();
  268|  3.48k|    value& jv = detail::access::
  269|  3.48k|        construct_value(top_,
  270|  3.48k|            std::forward<Args>(args)...);
  271|  3.48k|    ++top_;
  272|  3.48k|    return jv;
  273|  3.48k|}

_ZN5boost4json6parser5writeENS_4core17basic_string_viewIcEERNS_6system10error_codeE:
  750|  6.85k|    {
  751|  6.85k|        return write(
  752|  6.85k|            s.data(), s.size(), ec);
  753|  6.85k|    }
_ZN5boost4json6parserD2Ev:
  137|  6.85k|    ~parser() = default;
_ZN5boost4json6parserC2ILm4096EEENS0_11storage_ptrERKNS0_13parse_optionsERAT__h:
  282|  6.85k|    {
  283|  6.85k|    }

_ZNK5boost4json8pilferedINS0_5valueEE3getEv:
   78|  2.77M|    {
   79|  2.77M|        return t_;
   80|  2.77M|    }
_ZN5boost4json6pilferIRNS0_5valueEEENSt3__111conditionalIXaasr3std24is_nothrow_constructibleINS4_16remove_referenceIT_E4typeENS0_8pilferedIS9_EEEE5valuentsr3std24is_nothrow_constructibleIS9_NS0_13detail_pilfer12not_pilferedIS9_EEEE5valueESB_OS9_E4typeEOS7_:
  187|  1.84M|{
  188|  1.84M|    using U =
  189|  1.84M|        typename std::remove_reference<T>::type;
  190|  1.84M|    static_assert(
  191|  1.84M|        is_pilfer_constructible<U>::value, "");
  192|  1.84M|    return typename std::conditional<
  193|  1.84M|        std::is_nothrow_constructible<
  194|  1.84M|            U, pilfered<U> >::value &&
  195|  1.84M|        ! std::is_nothrow_constructible<
  196|  1.84M|            U, detail_pilfer::not_pilfered<U> >::value,
  197|  1.84M|        pilfered<U>, U&&
  198|  1.84M|            >::type(std::move(t));
  199|  1.84M|}
_ZN5boost4json8pilferedINS0_5valueEEC2EOS2_:
   69|  1.84M|    {
   70|  1.84M|    }
_ZN5boost4json6pilferIRNS0_11storage_ptrEEENSt3__111conditionalIXaasr3std24is_nothrow_constructibleINS4_16remove_referenceIT_E4typeENS0_8pilferedIS9_EEEE5valuentsr3std24is_nothrow_constructibleIS9_NS0_13detail_pilfer12not_pilferedIS9_EEEE5valueESB_OS9_E4typeEOS7_:
  187|  13.7k|{
  188|  13.7k|    using U =
  189|  13.7k|        typename std::remove_reference<T>::type;
  190|  13.7k|    static_assert(
  191|  13.7k|        is_pilfer_constructible<U>::value, "");
  192|  13.7k|    return typename std::conditional<
  193|  13.7k|        std::is_nothrow_constructible<
  194|  13.7k|            U, pilfered<U> >::value &&
  195|  13.7k|        ! std::is_nothrow_constructible<
  196|  13.7k|            U, detail_pilfer::not_pilfered<U> >::value,
  197|  13.7k|        pilfered<U>, U&&
  198|  13.7k|            >::type(std::move(t));
  199|  13.7k|}

_ZNK5boost4json11storage_ptr6addrefEv:
  104|  4.14M|    {
  105|  4.14M|        if(is_shared())
  ------------------
  |  Branch (105:12): [True: 0, False: 4.14M]
  ------------------
  106|      0|            get_shared()->refs.fetch_add(
  107|      0|                1, std::memory_order_relaxed);
  108|  4.14M|    }
_ZN5boost4json11storage_ptrC2EOS1_:
  262|  9.20M|    {
  263|  9.20M|    }
_ZN5boost4json11storage_ptrC2ERKS1_:
  288|  4.14M|    {
  289|  4.14M|        addref();
  290|  4.14M|    }
_ZN5boost4json11storage_ptraSEOS1_:
  322|  2.11k|    {
  323|  2.11k|        release();
  324|  2.11k|        i_ = detail::exchange(other.i_, 0);
  325|  2.11k|        return *this;
  326|  2.11k|    }
_ZNK5boost4json11storage_ptr39is_not_shared_and_deallocate_is_trivialEv:
  396|   966k|    {
  397|   966k|        return (i_ & 3) == 2;
  398|   966k|    }
_ZNK5boost4json11storage_ptr3getEv:
  413|  2.06M|    {
  414|  2.06M|        if(i_ != 0)
  ------------------
  |  Branch (414:12): [True: 0, False: 2.06M]
  ------------------
  415|      0|            return reinterpret_cast<
  416|      0|                memory_resource*>(i_ & ~3);
  417|  2.06M|        return default_resource::get();
  418|  2.06M|    }
_ZNK5boost4json11storage_ptrptEv:
  433|  2.06M|    {
  434|  2.06M|        return get();
  435|  2.06M|    }

_ZN5boost4json6stringD2Ev:
  160|   134k|    {
  161|   134k|        impl_.destroy(sp_);
  162|   134k|    }
_ZN5boost4json6stringC2ENS0_11storage_ptrE:
  229|  10.2k|    {
  230|  10.2k|    }
_ZN5boost4json6string6assignENS_4core17basic_string_viewIcEE:
  840|  20.5k|    {
  841|  20.5k|        return assign(s.data(), s.size());
  842|  20.5k|    }
_ZN5boost4json6string4dataEv:
 1071|  20.4k|    {
 1072|  20.4k|        return impl_.data();
 1073|  20.4k|    }
_ZNK5boost4json6string8capacityEv:
 1446|  10.2k|    {
 1447|  10.2k|        return impl_.capacity();
 1448|  10.2k|    }
_ZN5boost4json6string7reserveEm:
 1481|  10.2k|    {
 1482|  10.2k|        if(new_capacity <= capacity())
  ------------------
  |  Branch (1482:12): [True: 9.32k, False: 883]
  ------------------
 1483|  9.32k|            return;
 1484|    883|        reserve_impl(new_capacity);
 1485|    883|    }
_ZN5boost4json6string4growEm:
 2353|  10.2k|    {
 2354|  10.2k|        BOOST_ASSERT(
  ------------------
  |  |   60|  10.2k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2355|  10.2k|            n <= impl_.capacity() - impl_.size());
 2356|  10.2k|        impl_.term(impl_.size() + n);
 2357|  10.2k|    }

_ZN5boost4json5valueC2EONS0_6detail15unchecked_arrayE:
   81|  1.92k|    {
   82|  1.92k|    }
_ZN5boost4json5valueC2EONS0_6detail16unchecked_objectE:
   88|  14.3k|    {
   89|  14.3k|    }
_ZN5boost4json5valueC2ERKNS0_6detail5key_tENS_4core17basic_string_viewIcEENS0_11storage_ptrE:
   96|  1.02M|    {
   97|  1.02M|    }
_ZN5boost4json5valueC2ERKNS0_6detail5key_tENS_4core17basic_string_viewIcEES8_NS0_11storage_ptrE:
  105|  1.59k|    {
  106|  1.59k|    }
_ZN5boost4json5valueC2ENS0_8pilferedIS1_EE:
  202|   925k|    {
  203|   925k|        relocate(this, other.get());
  204|   925k|        ::new(&other.get().sca_) scalar();
  205|   925k|    }
_ZN5boost4json5valueC2EDnNS0_11storage_ptrE:
  333|  8.22k|    {
  334|  8.22k|    }
_ZN5boost4json5valueC2ElNS0_11storage_ptrE:
  455|  3.01M|    {
  456|  3.01M|    }
_ZN5boost4json5valueC2EmNS0_11storage_ptrE:
  565|  2.33k|    {
  566|  2.33k|    }
_ZN5boost4json5valueC2EdNS0_11storage_ptrE:
  608|  32.1k|    {
  609|  32.1k|    }
_ZN5boost4json5valueC2ENS_4core17basic_string_viewIcEENS0_11storage_ptrE:
  633|  20.5k|    {
  634|  20.5k|    }
_ZN5boost4json5valueC2ENS0_13string_kind_tENS0_11storage_ptrE:
  778|  10.2k|    {
  779|  10.2k|    }
_ZNK5boost4json5value7storageEv:
 2472|   922k|    {
 2473|   922k|        return sp_;
 2474|   922k|    }
_ZNR5boost4json5value10get_stringEv:
 2896|  10.2k|    {
 2897|  10.2k|        BOOST_ASSERT(is_string());
  ------------------
  |  |   60|  10.2k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 2898|  10.2k|        return str_;
 2899|  10.2k|    }
_ZN5boost4json5value8relocateEPS1_RKS1_:
 3552|   925k|    {
 3553|   925k|        std::memcpy(
 3554|   925k|            static_cast<void*>(dest),
 3555|   925k|            &src,
 3556|   925k|            sizeof(src));
 3557|   925k|    }
_ZN5boost4json14key_value_pairD2Ev:
 3735|   922k|    {
 3736|   922k|        auto const& sp = value_.storage();
 3737|   922k|        if(sp.is_not_shared_and_deallocate_is_trivial())
  ------------------
  |  Branch (3737:12): [True: 0, False: 922k]
  ------------------
 3738|      0|            return;
 3739|   922k|        if(key_ == empty_)
  ------------------
  |  Branch (3739:12): [True: 0, False: 922k]
  ------------------
 3740|      0|            return;
 3741|   922k|        sp->deallocate(const_cast<char*>(key_),
 3742|   922k|            len_ + 1, alignof(char));
 3743|   922k|    }
_ZNK5boost4json14key_value_pair3keyEv:
 3972|  2.76M|    {
 3973|  2.76M|        return { key_, len_ };
 3974|  2.76M|    }
_ZN5boost4json5valueC2IbvEET_NS0_11storage_ptrE:
  366|  4.64k|    {
  367|  4.64k|    }

_ZN5boost6system6detail11failed_implEiRKNS0_14error_categoryE:
  210|  4.73k|{
  211|  4.73k|    if( cat.id_ == system_category_id || cat.id_ == generic_category_id )
  ------------------
  |  Branch (211:9): [True: 0, False: 4.73k]
  |  Branch (211:42): [True: 0, False: 4.73k]
  ------------------
  212|      0|    {
  213|      0|        return ev != 0;
  214|      0|    }
  215|  4.73k|    else
  216|  4.73k|    {
  217|  4.73k|        return cat.failed( ev );
  218|  4.73k|    }
  219|  4.73k|}

_ZN5boost6system10error_codeC2EiRKNS0_14error_categoryE:
  130|  4.73k|    {
  131|  4.73k|        d1_.val_ = val;
  132|  4.73k|        d1_.cat_ = &cat;
  133|  4.73k|    }
_ZN5boost6system10error_codeC2ERKS1_PKNS_15source_locationE:
  155|  4.73k|    {
  156|  4.73k|        *this = ec;
  157|       |
  158|  4.73k|        if( ec.lc_flags_ != 0 && ec.lc_flags_ != 1 )
  ------------------
  |  Branch (158:13): [True: 4.73k, False: 0]
  |  Branch (158:34): [True: 4.73k, False: 0]
  ------------------
  159|  4.73k|        {
  160|  4.73k|            lc_flags_ = ( loc? reinterpret_cast<boost::uintptr_t>( loc ): 2 ) | ( ec.lc_flags_ & 1 );
  ------------------
  |  Branch (160:27): [True: 4.73k, False: 0]
  ------------------
  161|  4.73k|        }
  162|  4.73k|    }
_ZN5boost6system10error_code6assignERKS1_PKNS_15source_locationE:
  199|  4.73k|    {
  200|  4.73k|        *this = error_code( ec, loc );
  201|  4.73k|    }
_ZN5boost6system10error_codeC2INS_4json5errorEEET_PNS0_6detail9enable_ifIXoosr18is_error_code_enumIS5_EE5valuesr3std18is_error_code_enumIS5_EE5valueEvE4typeE:
  149|  4.73k|    {
  150|  4.73k|        *this = make_error_code( e );
  151|  4.73k|    }

_Z10fuzz_parseN5boost4core17basic_string_viewIcEE:
   17|  6.85k|{
   18|  6.85k|    error_code ec;
   19|  6.85k|    value jv = parse( sv, ec );
   20|  6.85k|    if(ec)
  ------------------
  |  Branch (20:8): [True: 4.73k, False: 2.11k]
  ------------------
   21|  4.73k|        return false;
   22|  2.11k|    return jv.is_number();
   23|  6.85k|}
LLVMFuzzerTestOneInput:
   29|  6.85k|{
   30|  6.85k|    try
   31|  6.85k|    {
   32|  6.85k|        string_view s{reinterpret_cast<
   33|  6.85k|            const char*>(data), size};
   34|  6.85k|        fuzz_parse(s);
   35|  6.85k|    }
   36|  6.85k|    catch(...)
   37|  6.85k|    {
   38|      0|    }
   39|  6.85k|    return 0;
   40|  6.85k|}

_ZN5boost4core17basic_string_viewIcEC2EPKcm:
  380|  6.90M|    {
  381|  6.90M|    }

_ZN5boost4json11storage_ptrC2Ev:
  166|   966k|    {
  167|   966k|    }
_ZN5boost4json11storage_ptrD2Ev:
  147|  13.3M|    {
  148|  13.3M|        release();
  149|  13.3M|    }
_ZNK5boost4json11storage_ptr7releaseEv:
  112|  13.3M|    {
  113|  13.3M|        if(is_shared())
  ------------------
  |  Branch (113:12): [True: 0, False: 13.3M]
  ------------------
  114|      0|        {
  115|      0|            auto const p = get_shared();
  116|      0|            if(p->refs.fetch_sub(1,
  ------------------
  |  Branch (116:16): [True: 0, False: 0]
  ------------------
  117|      0|                    std::memory_order_acq_rel) == 1)
  118|      0|                delete p;
  119|      0|        }
  120|  13.3M|    }
_ZNK5boost4json11storage_ptr9is_sharedEv:
  368|  17.5M|    {
  369|  17.5M|        return (i_ & 1) != 0;
  370|  17.5M|    }

_ZNK5boost4json5value9is_numberEv:
 1925|  2.11k|    {
 1926|       |        // VFALCO Could use bit 0x40 for this
 1927|  2.11k|        return
 1928|  2.11k|            kind() == json::kind::int64 ||
  ------------------
  |  Branch (1928:13): [True: 261, False: 1.85k]
  ------------------
 1929|  2.11k|            kind() == json::kind::uint64 ||
  ------------------
  |  Branch (1929:13): [True: 79, False: 1.77k]
  ------------------
 1930|  2.11k|            kind() == json::kind::double_;
  ------------------
  |  Branch (1930:13): [True: 1.19k, False: 581]
  ------------------
 1931|  2.11k|    }
_ZNK5boost4json5value4kindEv:
 1686|  3.21M|    {
 1687|  3.21M|        return static_cast<json::kind>(
 1688|  3.21M|            static_cast<unsigned char>(
 1689|  3.21M|                sca_.k) & 0x3f);
 1690|  3.21M|    }

_ZNK5boost6system14error_category6failedEi:
  147|  4.73k|    {
  148|  4.73k|        return ev != 0;
  149|  4.73k|    }

_ZN5boost6system10error_codeC2Ev:
  125|  27.4k|    {
  126|  27.4k|    }
_ZNK5boost6system10error_codecvbEv:
  341|  34.8k|    {
  342|  34.8k|        return failed();
  343|  34.8k|    }
_ZNK5boost6system10error_code6failedEv:
  320|  34.8k|    {
  321|  34.8k|        if( lc_flags_ & 1 )
  ------------------
  |  Branch (321:13): [True: 17.8k, False: 17.0k]
  ------------------
  322|  17.8k|        {
  323|  17.8k|#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR)
  324|  17.8k|            if( lc_flags_ == 1 )
  ------------------
  |  Branch (324:17): [True: 0, False: 17.8k]
  ------------------
  325|      0|            {
  326|      0|                std::error_code const& ec = *reinterpret_cast<std::error_code const*>( d2_ );
  327|      0|                return ec.value() != 0;
  328|      0|            }
  329|  17.8k|#endif
  330|  17.8k|            return true;
  331|  17.8k|        }
  332|  17.0k|        else
  333|  17.0k|        {
  334|  17.0k|            return false;
  335|  17.0k|        }
  336|  34.8k|    }

