Raúl Marín b2e41e8b88 Keep chars_format::javascript out of the common hot path
8.3.0 added the ECMAScript leading-zero rule as a runtime test on fmt inside
parse_number_string, so unlike basic_json_fmt its error returns and Annex B
octal scan land in the parser body that every from_chars instantiation
force-inlines. from_chars_caller<double>::call grew from 935 to 1031
instructions and other formats lost about 3% on short inputs.

Make the rule a compile-time parameter of the parser body, selected once at the
entry point, and take chars_format::javascript out to a cold conversion before
anything else is live so the branch is a tail call. parse_number_string keeps
its signature and behaviour.

benchmarks/benchmark.cpp, Intel Xeon 6975P-C, clang 22.1.8, cycles per float,
best of 7:

              canada.txt    mesh.txt
  8.2.10         47.03        24.78
  8.3.0          47.34        26.08
  this           46.28        24.86
2026-09-21 19:47:21 +00:00
..
ascii_number.h Keep chars_format::javascript out of the common hot path 2026-09-21 19:47:21 +00:00
bigint.h Avoid old-style casts 2026-08-20 13:30:32 -04:00
constexpr_feature_detect.h adding FASTFLOAT_IF_CONSTEXPR17 2025-03-09 17:10:55 -04:00
decimal_to_binary.h better wording. 2025-02-06 00:16:28 -05:00
digit_comparison.h Avoid old-style casts 2026-08-20 13:30:32 -04:00
fast_float.h Fix spelling 2026-06-02 15:30:37 +01:00
fast_table.h remove out-of-line defns of constexpr static data members under c++17 2024-08-30 10:30:40 -05:00
float_common.h Keep chars_format::javascript out of the common hot path 2026-09-21 19:47:21 +00:00
parse_number.h Keep chars_format::javascript out of the common hot path 2026-09-21 19:47:21 +00:00