From e381ca258f363bb54d37da7933a83d5d65b9e739 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 9 Jul 2021 17:07:24 +0100 Subject: [PATCH] LibWeb: Add more logging to CSS parser --- .../Libraries/LibWeb/CSS/Parser/Parser.cpp | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 88d38ea7e8..d195cadf05 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -155,6 +155,8 @@ NonnullRefPtr Parser::parse_as_stylesheet() template NonnullRefPtr Parser::parse_as_stylesheet(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_stylesheet"); + auto parser_rules = consume_a_list_of_rules(tokens, true); NonnullRefPtrVector rules; @@ -177,6 +179,8 @@ Vector Parser::parse_a_selector() template Vector Parser::parse_a_selector(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_a_selector"); + auto comma_separated_lists = parse_as_comma_separated_list_of_component_values(tokens); Vector selectors; @@ -198,6 +202,8 @@ Vector Parser::parse_a_relative_selector() template Vector Parser::parse_a_relative_selector(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_a_relative_selector"); + auto comma_separated_lists = parse_as_comma_separated_list_of_component_values(tokens); Vector selectors; @@ -215,6 +221,8 @@ Vector Parser::parse_a_relative_selector(TokenStream& tokens) template Optional Parser::parse_single_selector(TokenStream& tokens, bool is_relative) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_single_selector"); + // FIXME: Bring this all in line with the spec. https://www.w3.org/TR/selectors-4/ Vector selectors; @@ -554,6 +562,8 @@ NonnullRefPtrVector Parser::consume_a_list_of_rules(bool top_level) template NonnullRefPtrVector Parser::consume_a_list_of_rules(TokenStream& tokens, bool top_level) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_list_of_rules"); + NonnullRefPtrVector rules; for (;;) { @@ -605,6 +615,8 @@ NonnullRefPtr Parser::consume_an_at_rule() template NonnullRefPtr Parser::consume_an_at_rule(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_an_at_rule"); + auto name_ident = tokens.next_token(); VERIFY(name_ident.is(Token::Type::Ident)); @@ -643,6 +655,8 @@ RefPtr Parser::consume_a_qualified_rule() template RefPtr Parser::consume_a_qualified_rule(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_qualified_rule"); + NonnullRefPtr rule = create(StyleRule::Type::Qualified); for (;;) { @@ -671,12 +685,16 @@ RefPtr Parser::consume_a_qualified_rule(TokenStream& tokens) template<> StyleComponentValueRule Parser::consume_a_component_value(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_component_value - shortcut: '{}'", tokens.peek_token().to_debug_string()); + return tokens.next_token(); } template StyleComponentValueRule Parser::consume_a_component_value(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_component_value"); + auto token = tokens.next_token(); if (token.is(Token::Type::OpenCurly) || token.is(Token::Type::OpenSquare) || token.is(Token::Type::OpenParen)) @@ -701,6 +719,8 @@ NonnullRefPtr Parser::consume_a_simple_block() template NonnullRefPtr Parser::consume_a_simple_block(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_simple_block"); + auto ending_token = ((Token)tokens.current_token()).mirror_variant(); NonnullRefPtr block = create(); @@ -732,6 +752,8 @@ NonnullRefPtr Parser::consume_a_function() template NonnullRefPtr Parser::consume_a_function(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_function"); + auto name_ident = tokens.current_token(); VERIFY(name_ident.is(Token::Type::Function)); NonnullRefPtr function = create(((Token)name_ident).m_value.to_string()); @@ -763,6 +785,8 @@ Optional Parser::consume_a_declaration() template Optional Parser::consume_a_declaration(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_declaration"); + auto token = tokens.next_token(); StyleDeclarationRule declaration; @@ -823,6 +847,8 @@ Vector Parser::consume_a_list_of_declarations() template Vector Parser::consume_a_list_of_declarations(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::consume_a_list_of_declarations"); + Vector list; for (;;) { @@ -880,6 +906,8 @@ RefPtr Parser::parse_as_rule() template RefPtr Parser::parse_as_rule(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_rule"); + RefPtr rule; tokens.skip_whitespace(); @@ -917,6 +945,8 @@ NonnullRefPtrVector Parser::parse_as_list_of_rules() template NonnullRefPtrVector Parser::parse_as_list_of_rules(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_list_of_rules"); + auto parsed_rules = consume_a_list_of_rules(tokens, false); NonnullRefPtrVector rules; @@ -937,6 +967,8 @@ Optional Parser::parse_as_declaration() template Optional Parser::parse_as_declaration(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_declaration"); + tokens.skip_whitespace(); auto token = tokens.peek_token(); @@ -960,6 +992,8 @@ RefPtr Parser::parse_as_list_of_declarations() template RefPtr Parser::parse_as_list_of_declarations(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_list_of_declarations"); + auto declarations_and_at_rules = consume_a_list_of_declarations(tokens); Vector properties; @@ -995,6 +1029,8 @@ Optional Parser::parse_as_component_value() template Optional Parser::parse_as_component_value(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_component_value"); + tokens.skip_whitespace(); auto token = tokens.peek_token(); @@ -1023,6 +1059,8 @@ Vector Parser::parse_as_list_of_component_values() template Vector Parser::parse_as_list_of_component_values(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_list_of_component_values"); + Vector rules; for (;;) { @@ -1044,6 +1082,8 @@ Vector> Parser::parse_as_comma_separated_list_of template Vector> Parser::parse_as_comma_separated_list_of_component_values(TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_as_comma_separated_list_of_component_values"); + Vector> lists; lists.append({}); @@ -1067,6 +1107,8 @@ Vector> Parser::parse_as_comma_separated_list_of RefPtr Parser::convert_to_rule(NonnullRefPtr rule) { + dbgln_if(CSS_PARSER_TRACE, "Parser::convert_to_rule"); + if (rule->m_type == StyleRule::Type::At) { if (rule->m_name.equals_ignoring_case("import"sv) && !rule->prelude().is_empty()) { @@ -1110,6 +1152,8 @@ RefPtr Parser::convert_to_rule(NonnullRefPtr rule) RefPtr Parser::convert_to_declaration(NonnullRefPtr block) { + dbgln_if(CSS_PARSER_TRACE, "Parser::convert_to_declaration"); + if (!block->is_curly()) return {}; @@ -1119,6 +1163,8 @@ RefPtr Parser::convert_to_declaration(NonnullRefPtr Parser::convert_to_style_property(StyleDeclarationRule& declaration) { + dbgln_if(CSS_PARSER_TRACE, "Parser::convert_to_style_property"); + auto& property_name = declaration.m_name; auto property_id = property_id_from_string(property_name); if (property_id == PropertyID::Invalid && property_name.starts_with("--")) @@ -1220,6 +1266,8 @@ Optional Parser::try_parse_float(StringView string) RefPtr Parser::parse_css_value(PropertyID property_id, TokenStream& tokens) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_css_value"); + // FIXME: This is mostly copied from the old, deprecated parser. It is probably not to spec. auto takes_integer_value = [](PropertyID property_id) -> bool { @@ -1368,6 +1416,8 @@ RefPtr Parser::parse_css_value(PropertyID property_id, TokenStream Parser::parse_nth_child_pattern(TokenStream& values) { + dbgln_if(CSS_PARSER_TRACE, "Parser::parse_nth_child_pattern"); + Selector::SimpleSelector::NthChildPattern pattern; auto current_value = values.next_token();