mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:27:35 +00:00
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.
This commit is contained in:
parent
9408013177
commit
0e51aea781
1 changed files with 9 additions and 7 deletions
|
@ -1291,17 +1291,19 @@ bool Parser::match_name()
|
||||||
NonnullRefPtr<Name> Parser::parse_name(ASTNode& parent)
|
NonnullRefPtr<Name> Parser::parse_name(ASTNode& parent)
|
||||||
{
|
{
|
||||||
NonnullRefPtr<Name> name_node = create_ast_node<Name>(parent, position(), {});
|
NonnullRefPtr<Name> name_node = create_ast_node<Name>(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();
|
auto token = consume();
|
||||||
name_node->m_scope.append(create_ast_node<Identifier>(*name_node, token.start(), token.end(), token.text()));
|
name_node->m_scope.append(create_ast_node<Identifier>(*name_node, token.start(), token.end(), token.text()));
|
||||||
if (peek().type() == Token::Type::ColonColon)
|
consume(Token::Type::ColonColon);
|
||||||
consume();
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VERIFY(!name_node->m_scope.is_empty());
|
if (peek().type() == Token::Type::Identifier || peek().type() == Token::Type::KnownType) {
|
||||||
name_node->m_name = name_node->m_scope.take_last();
|
auto token = consume();
|
||||||
|
name_node->m_name = create_ast_node<Identifier>(*name_node, token.start(), token.end(), token.text());
|
||||||
|
} else {
|
||||||
|
name_node->set_end(position());
|
||||||
|
return name_node;
|
||||||
|
}
|
||||||
|
|
||||||
if (match_template_arguments()) {
|
if (match_template_arguments()) {
|
||||||
consume(Token::Type::Less);
|
consume(Token::Type::Less);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue