1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:27:35 +00:00

LibCpp: Parse variable declarations in global scope

This commit is contained in:
Itamar 2021-03-27 18:42:32 +03:00 committed by Andreas Kling
parent 9545c156b5
commit 0babb39cae
2 changed files with 8 additions and 3 deletions

View file

@ -199,7 +199,7 @@ NonnullRefPtr<Statement> Parser::parse_statement(ASTNode& parent)
return parse_comment(parent);
}
if (match_variable_declaration()) {
return parse_variable_declaration(parent);
return parse_variable_declaration(parent, false);
}
if (match_expression()) {
return parse_expression(parent);
@ -277,7 +277,7 @@ bool Parser::match_variable_declaration()
return match(Token::Type::Semicolon);
}
NonnullRefPtr<VariableDeclaration> Parser::parse_variable_declaration(ASTNode& parent)
NonnullRefPtr<VariableDeclaration> Parser::parse_variable_declaration(ASTNode& parent, bool expect_semicolon)
{
SCOPE_LOGGER();
auto var = create_ast_node<VariableDeclaration>(parent, position(), {});
@ -295,6 +295,9 @@ NonnullRefPtr<VariableDeclaration> Parser::parse_variable_declaration(ASTNode& p
initial_value = parse_expression(var);
}
if(expect_semicolon)
consume(Token::Type::Semicolon);
var->set_end(position());
var->m_name = text_of_token(identifier_token);
var->m_initial_value = move(initial_value);
@ -533,6 +536,8 @@ Optional<Parser::DeclarationType> Parser::match_declaration_in_translation_unit(
return DeclarationType::Struct;
if (match_namespace_declaration())
return DeclarationType::Namespace;
if (match_variable_declaration())
return DeclarationType::Variable;
return {};
}