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:
parent
9545c156b5
commit
0babb39cae
2 changed files with 8 additions and 3 deletions
|
@ -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 {};
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue