Skip to content

Commit 112299f

Browse files
committed
make parse_number slow
1 parent a627d51 commit 112299f

File tree

1 file changed

+34
-33
lines changed

1 file changed

+34
-33
lines changed

include/boost/json/basic_parser_impl.hpp

+34-33
Original file line numberDiff line numberDiff line change
@@ -2017,7 +2017,7 @@ parse_number(const char* p,
20172017
std::integral_constant<char, First_> first,
20182018
std::integral_constant<number_precision, Numbers_> mode)
20192019
{
2020-
constexpr bool precise_parsing = mode == number_precision::precise;
2020+
// constexpr bool precise_parsing = mode == number_precision::precise;
20212021
constexpr bool no_parsing = mode == number_precision::none;
20222022

20232023
// only one of these will be true if we are not resuming
@@ -2231,8 +2231,8 @@ parse_number(const char* p,
22312231
{begin, cs.used(begin)}, ec_)))
22322232
return fail(cs.begin());
22332233

2234-
BOOST_IF_CONSTEXPR( precise_parsing )
2235-
num_buf_.append( begin, cs.used(begin) );
2234+
// BOOST_IF_CONSTEXPR( precise_parsing )
2235+
num_buf_.append( begin, cs.used(begin) );
22362236
return maybe_suspend(
22372237
cs.begin(), state::num1, num);
22382238
}
@@ -2256,8 +2256,8 @@ parse_number(const char* p,
22562256
{begin, cs.used(begin)}, ec_)))
22572257
return fail(cs.begin());
22582258

2259-
BOOST_IF_CONSTEXPR( precise_parsing )
2260-
num_buf_.append( begin, cs.used(begin) );
2259+
// BOOST_IF_CONSTEXPR( precise_parsing )
2260+
num_buf_.append( begin, cs.used(begin) );
22612261
return suspend(cs.begin(), state::num2, num);
22622262
}
22632263
goto finish_int;
@@ -2291,8 +2291,8 @@ parse_number(const char* p,
22912291
{begin, cs.used(begin)}, ec_)))
22922292
return fail(cs.begin());
22932293

2294-
BOOST_IF_CONSTEXPR( precise_parsing )
2295-
num_buf_.append( begin, cs.used(begin) );
2294+
// BOOST_IF_CONSTEXPR( precise_parsing )
2295+
num_buf_.append( begin, cs.used(begin) );
22962296
return suspend(cs.begin(), state::num2, num);
22972297
}
22982298
goto finish_int;
@@ -2334,8 +2334,8 @@ parse_number(const char* p,
23342334
{begin, cs.used(begin)}, ec_)))
23352335
return fail(cs.begin());
23362336

2337-
BOOST_IF_CONSTEXPR( precise_parsing )
2338-
num_buf_.append( begin, cs.used(begin) );
2337+
// BOOST_IF_CONSTEXPR( precise_parsing )
2338+
num_buf_.append( begin, cs.used(begin) );
23392339
return suspend(cs.begin(), state::num3, num);
23402340
}
23412341
goto finish_dub;
@@ -2385,8 +2385,8 @@ parse_number(const char* p,
23852385
{begin, cs.used(begin)}, ec_)))
23862386
return fail(cs.begin());
23872387

2388-
BOOST_IF_CONSTEXPR( precise_parsing )
2389-
num_buf_.append( begin, cs.used(begin) );
2388+
// BOOST_IF_CONSTEXPR( precise_parsing )
2389+
num_buf_.append( begin, cs.used(begin) );
23902390
return maybe_suspend(
23912391
cs.begin(), state::num4, num);
23922392
}
@@ -2424,8 +2424,8 @@ parse_number(const char* p,
24242424
{begin, cs.used(begin)}, ec_)))
24252425
return fail(cs.begin());
24262426

2427-
BOOST_IF_CONSTEXPR( precise_parsing )
2428-
num_buf_.append( begin, cs.used(begin) );
2427+
// BOOST_IF_CONSTEXPR( precise_parsing )
2428+
num_buf_.append( begin, cs.used(begin) );
24292429
return suspend(cs.begin(), state::num5, num);
24302430
}
24312431
goto finish_dub;
@@ -2462,8 +2462,8 @@ parse_number(const char* p,
24622462
{begin, cs.used(begin)}, ec_)))
24632463
return fail(cs.begin());
24642464

2465-
BOOST_IF_CONSTEXPR( precise_parsing )
2466-
num_buf_.append( begin, cs.used(begin) );
2465+
// BOOST_IF_CONSTEXPR( precise_parsing )
2466+
num_buf_.append( begin, cs.used(begin) );
24672467
return suspend(cs.begin(), state::num6, num);
24682468
}
24692469
goto finish_int;
@@ -2502,8 +2502,8 @@ parse_number(const char* p,
25022502
{begin, cs.used(begin)}, ec_)))
25032503
return fail(cs.begin());
25042504

2505-
BOOST_IF_CONSTEXPR( precise_parsing )
2506-
num_buf_.append( begin, cs.used(begin) );
2505+
// BOOST_IF_CONSTEXPR( precise_parsing )
2506+
num_buf_.append( begin, cs.used(begin) );
25072507
return suspend(cs.begin(), state::num7, num);
25082508
}
25092509
// digit required
@@ -2540,8 +2540,8 @@ parse_number(const char* p,
25402540
{begin, cs.used(begin)}, ec_)))
25412541
return fail(cs.begin());
25422542

2543-
BOOST_IF_CONSTEXPR( precise_parsing )
2544-
num_buf_.append( begin, cs.used(begin) );
2543+
// BOOST_IF_CONSTEXPR( precise_parsing )
2544+
num_buf_.append( begin, cs.used(begin) );
25452545
return suspend(cs.begin(), state::num8, num);
25462546
}
25472547
goto finish_dub;
@@ -2591,8 +2591,8 @@ parse_number(const char* p,
25912591
{begin, cs.used(begin)}, ec_)))
25922592
return fail(cs.begin());
25932593

2594-
BOOST_IF_CONSTEXPR( precise_parsing )
2595-
num_buf_.append( begin, cs.used(begin) );
2594+
// BOOST_IF_CONSTEXPR( precise_parsing )
2595+
num_buf_.append( begin, cs.used(begin) );
25962596
return maybe_suspend(
25972597
cs.begin(), state::exp1, num);
25982598
}
@@ -2622,8 +2622,8 @@ parse_number(const char* p,
26222622
{begin, cs.used(begin)}, ec_)))
26232623
return fail(cs.begin());
26242624

2625-
BOOST_IF_CONSTEXPR( precise_parsing )
2626-
num_buf_.append( begin, cs.used(begin) );
2625+
// BOOST_IF_CONSTEXPR( precise_parsing )
2626+
num_buf_.append( begin, cs.used(begin) );
26272627
return suspend(cs.begin(), state::exp2, num);
26282628
}
26292629
// digit required
@@ -2661,8 +2661,8 @@ parse_number(const char* p,
26612661
{begin, cs.used(begin)}, ec_)))
26622662
return fail(cs.begin());
26632663

2664-
BOOST_IF_CONSTEXPR( precise_parsing )
2665-
num_buf_.append( begin, cs.used(begin) );
2664+
// BOOST_IF_CONSTEXPR( precise_parsing )
2665+
num_buf_.append( begin, cs.used(begin) );
26662666
return suspend(cs.begin(), state::exp3, num);
26672667
}
26682668
}
@@ -2754,8 +2754,9 @@ parse_number(const char* p,
27542754
finish_dub:
27552755
double d;
27562756
std::size_t const size = cs.used(begin);
2757-
BOOST_ASSERT( !num_buf_.size() || precise_parsing );
2758-
BOOST_IF_CONSTEXPR( precise_parsing )
2757+
// BOOST_ASSERT( !num_buf_.size() || precise_parsing );
2758+
// BOOST_IF_CONSTEXPR( precise_parsing )
2759+
BOOST_IF_CONSTEXPR( !no_parsing )
27592760
{
27602761
char const* data = begin;
27612762
std::size_t full_size = size;
@@ -2775,12 +2776,12 @@ parse_number(const char* p,
27752776
}
27762777
else BOOST_IF_CONSTEXPR( no_parsing )
27772778
d = 0;
2778-
else
2779-
d = detail::dec_to_float(
2780-
num.mant,
2781-
num.bias + (num.frac ?
2782-
-num.exp : num.exp),
2783-
num.neg);
2779+
// else
2780+
// d = detail::dec_to_float(
2781+
// num.mant,
2782+
// num.bias + (num.frac ?
2783+
// -num.exp : num.exp),
2784+
// num.neg);
27842785
if(BOOST_JSON_UNLIKELY(
27852786
! h_.on_double(d, {begin, size}, ec_)))
27862787
return fail(cs.begin());

0 commit comments

Comments
 (0)