srctree

Robin Linden parent c628aec4 200e8d8c
css2: Fix consume_number eating an extra character

css2/tokenizer.cpp added: 13, removed: 10, total 3
@@ -368,18 +368,14 @@ std::pair<std::variant<int, double>, NumericType> Tokenizer::consume_number(char
std::variant<int, double> result{};
std::string repr{};
 
std::optional<char> next_input;
if (first_byte == '-') {
assert(util::is_digit(first_byte) || first_byte == '-' || first_byte == '+');
if (first_byte != '+') {
repr += first_byte;
next_input = consume_next_input_character();
} else if (first_byte == '+') {
next_input = consume_next_input_character();
} else {
next_input = first_byte;
}
 
for (; next_input && util::is_digit(*next_input); next_input = consume_next_input_character()) {
for (auto next_input = peek_input(0); next_input && util::is_digit(*next_input); next_input = peek_input(0)) {
repr += *next_input;
consume_next_input_character();
}
 
// TODO(robinlinden): Step 4, 5
 
css2/tokenizer_test.cpp added: 13, removed: 10, total 3
@@ -370,6 +370,13 @@ int main() {
expect_token(output, NumberToken{.data = 13});
});
 
s.add_test("number: less ez", [](etest::IActions &a) {
auto output = run_tokenizer(a, "(13)");
expect_token(output, OpenParenToken{});
expect_token(output, NumberToken{.data = 13});
expect_token(output, CloseParenToken{});
});
 
s.add_test("number: leading 0", [](etest::IActions &a) {
auto output = run_tokenizer(a, "00000001");
expect_token(output, NumberToken{.data = 1});