From 0e51aea78140c99aacbec5c0fbaddb01c8c2a622 Mon Sep 17 00:00:00 2001 From: Itamar Date: Sat, 15 May 2021 09:44:31 +0300 Subject: [PATCH] LibCpp: Modify parsing of a Name's scope A Name node can now have a non-empty scope and a null name. For example, "AK::" has a non-empty scope and a null name component. --- Userland/Libraries/LibCpp/Parser.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Userland/Libraries/LibCpp/Parser.cpp b/Userland/Libraries/LibCpp/Parser.cpp index 9619abab04e..62ae77e2a39 100644 --- a/Userland/Libraries/LibCpp/Parser.cpp +++ b/Userland/Libraries/LibCpp/Parser.cpp @@ -1291,17 +1291,19 @@ bool Parser::match_name() NonnullRefPtr Parser::parse_name(ASTNode& parent) { NonnullRefPtr name_node = create_ast_node(parent, position(), {}); - while (!eof() && (peek().type() == Token::Type::Identifier || peek().type() == Token::Type::KnownType)) { + while (!eof() && (peek().type() == Token::Type::Identifier || peek().type() == Token::Type::KnownType) && peek(1).type() == Token::Type::ColonColon) { auto token = consume(); name_node->m_scope.append(create_ast_node(*name_node, token.start(), token.end(), token.text())); - if (peek().type() == Token::Type::ColonColon) - consume(); - else - break; + consume(Token::Type::ColonColon); } - VERIFY(!name_node->m_scope.is_empty()); - name_node->m_name = name_node->m_scope.take_last(); + if (peek().type() == Token::Type::Identifier || peek().type() == Token::Type::KnownType) { + auto token = consume(); + name_node->m_name = create_ast_node(*name_node, token.start(), token.end(), token.text()); + } else { + name_node->set_end(position()); + return name_node; + } if (match_template_arguments()) { consume(Token::Type::Less);