From 1f5b5d3f9963acf75cf8f892d4e7ef210a6c738b Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Mon, 21 Mar 2022 17:23:41 +0000 Subject: [PATCH] LibWeb: Use intermediate ints when converting strings to numbers in CSS These three are all integers - we just repeatedly multiply them by 10 and then add a digit - so using an integer here is both faster and more accurate. :^) --- Userland/Libraries/LibWeb/CSS/Parser/Tokenizer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Tokenizer.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Tokenizer.cpp index fc01e34805..08e6a0fb5c 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Tokenizer.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Tokenizer.cpp @@ -582,7 +582,7 @@ double Tokenizer::convert_a_string_to_a_number(StringView string) // 2. An integer part: zero or more digits. // If there is at least one digit, let i [integer_part] be the number formed by interpreting the digits // as a base-10 integer; otherwise, let i be the number 0. - double integer_part = 0; + i64 integer_part = 0; while (is_ascii_digit(code_point_at(position))) { integer_part = (integer_part * 10) + (code_point_at(position) - '0'); position++; @@ -595,7 +595,7 @@ double Tokenizer::convert_a_string_to_a_number(StringView string) // 4. A fractional part: zero or more digits. // If there is at least one digit, let f [fractional_part] be the number formed by interpreting the digits // as a base-10 integer and d [fractional_digits] be the number of digits; otherwise, let f and d be the number 0. - double fractional_part = 0; + i64 fractional_part = 0; int fractional_digits = 0; while (is_ascii_digit(code_point_at(position))) { fractional_part = (fractional_part * 10) + (code_point_at(position) - '0'); @@ -619,7 +619,7 @@ double Tokenizer::convert_a_string_to_a_number(StringView string) // 7. An exponent: zero or more digits. // If there is at least one digit, let e [exponent] be the number formed by interpreting the digits as a // base-10 integer; otherwise, let e be the number 0. - double exponent = 0; + i64 exponent = 0; while (is_ascii_digit(code_point_at(position))) { exponent = (exponent * 10) + (code_point_at(position) - '0'); position++;