mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:17:34 +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);
|
return parse_comment(parent);
|
||||||
}
|
}
|
||||||
if (match_variable_declaration()) {
|
if (match_variable_declaration()) {
|
||||||
return parse_variable_declaration(parent);
|
return parse_variable_declaration(parent, false);
|
||||||
}
|
}
|
||||||
if (match_expression()) {
|
if (match_expression()) {
|
||||||
return parse_expression(parent);
|
return parse_expression(parent);
|
||||||
|
@ -277,7 +277,7 @@ bool Parser::match_variable_declaration()
|
||||||
return match(Token::Type::Semicolon);
|
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();
|
SCOPE_LOGGER();
|
||||||
auto var = create_ast_node<VariableDeclaration>(parent, position(), {});
|
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);
|
initial_value = parse_expression(var);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(expect_semicolon)
|
||||||
|
consume(Token::Type::Semicolon);
|
||||||
|
|
||||||
var->set_end(position());
|
var->set_end(position());
|
||||||
var->m_name = text_of_token(identifier_token);
|
var->m_name = text_of_token(identifier_token);
|
||||||
var->m_initial_value = move(initial_value);
|
var->m_initial_value = move(initial_value);
|
||||||
|
@ -533,6 +536,8 @@ Optional<Parser::DeclarationType> Parser::match_declaration_in_translation_unit(
|
||||||
return DeclarationType::Struct;
|
return DeclarationType::Struct;
|
||||||
if (match_namespace_declaration())
|
if (match_namespace_declaration())
|
||||||
return DeclarationType::Namespace;
|
return DeclarationType::Namespace;
|
||||||
|
if (match_variable_declaration())
|
||||||
|
return DeclarationType::Variable;
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ private:
|
||||||
NonnullRefPtr<FunctionDeclaration> parse_function_declaration(ASTNode& parent);
|
NonnullRefPtr<FunctionDeclaration> parse_function_declaration(ASTNode& parent);
|
||||||
NonnullRefPtr<FunctionDefinition> parse_function_definition(ASTNode& parent);
|
NonnullRefPtr<FunctionDefinition> parse_function_definition(ASTNode& parent);
|
||||||
NonnullRefPtr<Statement> parse_statement(ASTNode& parent);
|
NonnullRefPtr<Statement> parse_statement(ASTNode& parent);
|
||||||
NonnullRefPtr<VariableDeclaration> parse_variable_declaration(ASTNode& parent);
|
NonnullRefPtr<VariableDeclaration> parse_variable_declaration(ASTNode& parent, bool expect_semicolon=true);
|
||||||
NonnullRefPtr<Expression> parse_expression(ASTNode& parent);
|
NonnullRefPtr<Expression> parse_expression(ASTNode& parent);
|
||||||
NonnullRefPtr<Expression> parse_primary_expression(ASTNode& parent);
|
NonnullRefPtr<Expression> parse_primary_expression(ASTNode& parent);
|
||||||
NonnullRefPtr<Expression> parse_secondary_expression(ASTNode& parent, NonnullRefPtr<Expression> lhs);
|
NonnullRefPtr<Expression> parse_secondary_expression(ASTNode& parent, NonnullRefPtr<Expression> lhs);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue