diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index a7c719cd22..8c29b60d94 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -3815,17 +3815,18 @@ RefPtr Parser::parse_filter_value_list_value(TokenStream Parser::parse_flex_value(Vector const& component_values) +RefPtr Parser::parse_flex_value(TokenStream& tokens) { - auto tokens = TokenStream { component_values }; + auto transaction = tokens.begin_transaction(); auto make_flex_shorthand = [&](NonnullRefPtr flex_grow, NonnullRefPtr flex_shrink, NonnullRefPtr flex_basis) { + transaction.commit(); return ShorthandStyleValue::create(PropertyID::Flex, { PropertyID::FlexGrow, PropertyID::FlexShrink, PropertyID::FlexBasis }, { move(flex_grow), move(flex_shrink), move(flex_basis) }); }; - if (component_values.size() == 1) { + if (tokens.remaining_token_count() == 1) { // One-value syntax: | | none auto properties = Array { PropertyID::FlexGrow, PropertyID::FlexBasis, PropertyID::Flex }; auto property_and_value = parse_css_value_for_properties(properties, tokens); @@ -5802,7 +5803,7 @@ Parser::ParseErrorOr> Parser::parse_css_value(Property return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::Flex: - if (auto parsed_value = parse_flex_value(component_values)) + if (auto parsed_value = parse_flex_value(tokens); parsed_value && !tokens.has_next_token()) return parsed_value.release_nonnull(); return ParseError::SyntaxError; case PropertyID::FlexFlow: diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index e067d3fa2b..2568506553 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -236,7 +236,7 @@ private: RefPtr parse_border_radius_shorthand_value(TokenStream&); RefPtr parse_content_value(TokenStream&); RefPtr parse_display_value(TokenStream&); - RefPtr parse_flex_value(Vector const&); + RefPtr parse_flex_value(TokenStream&); RefPtr parse_flex_flow_value(Vector const&); RefPtr parse_font_value(Vector const&); RefPtr parse_font_family_value(TokenStream&);