AK+Everywhere: Replace custom number parsers with fast_float

Our floating point number parser was based on the fast_float library:
https://github.com/fastfloat/fast_float

However, our implementation only supports 8-bit characters. To support
UTF-16, we will need to be able to convert char16_t-based strings to
numbers as well. This works out-of-the-box with fast_float.

We can also use fast_float for integer parsing.
This commit is contained in:
Timothy Flynn
2025-06-26 19:06:46 -04:00
committed by Tim Flynn
parent 9fc3e72db2
commit 62d9a84b8d
Notes: github-actions[bot] 2025-07-03 13:53:10 +00:00
30 changed files with 413 additions and 3034 deletions

View File

@@ -5,6 +5,7 @@
*/
#include <AK/GenericLexer.h>
#include <AK/StringConversions.h>
#include <LibWeb/HTML/Numbers.h>
#include <LibWeb/Infra/CharacterTypes.h>
#include <math.h>
@@ -173,7 +174,7 @@ Optional<double> parse_floating_point_number(StringView string)
lexer.consume_while(is_ascii_digit);
size_t end_index = lexer.tell();
auto digits = lexer.input().substring_view(start_index, end_index - start_index);
auto optional_value = AK::StringUtils::convert_to_floating_point<double>(digits, TrimWhitespace::No);
auto optional_value = digits.to_number<double>(TrimWhitespace::No);
value *= optional_value.value();
}
@@ -274,7 +275,7 @@ fraction_exit:
lexer.consume_while(is_ascii_digit);
size_t end_index = lexer.tell();
auto digits = lexer.input().substring_view(start_index, end_index - start_index);
auto optional_value = AK::StringUtils::convert_to_int<i32>(digits);
auto optional_value = digits.to_number<i32>();
exponent *= optional_value.value();
}