diff --git a/Userland/Libraries/LibCpp/Parser.cpp b/Userland/Libraries/LibCpp/Parser.cpp index aebdc829c3..ea5b4b98b9 100644 --- a/Userland/Libraries/LibCpp/Parser.cpp +++ b/Userland/Libraries/LibCpp/Parser.cpp @@ -199,7 +199,7 @@ NonnullRefPtr 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 Parser::parse_variable_declaration(ASTNode& parent) +NonnullRefPtr Parser::parse_variable_declaration(ASTNode& parent, bool expect_semicolon) { SCOPE_LOGGER(); auto var = create_ast_node(parent, position(), {}); @@ -295,6 +295,9 @@ NonnullRefPtr 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::match_declaration_in_translation_unit( return DeclarationType::Struct; if (match_namespace_declaration()) return DeclarationType::Namespace; + if (match_variable_declaration()) + return DeclarationType::Variable; return {}; } diff --git a/Userland/Libraries/LibCpp/Parser.h b/Userland/Libraries/LibCpp/Parser.h index 98f9424f63..2255fcbc29 100644 --- a/Userland/Libraries/LibCpp/Parser.h +++ b/Userland/Libraries/LibCpp/Parser.h @@ -97,7 +97,7 @@ private: NonnullRefPtr parse_function_declaration(ASTNode& parent); NonnullRefPtr parse_function_definition(ASTNode& parent); NonnullRefPtr parse_statement(ASTNode& parent); - NonnullRefPtr parse_variable_declaration(ASTNode& parent); + NonnullRefPtr parse_variable_declaration(ASTNode& parent, bool expect_semicolon=true); NonnullRefPtr parse_expression(ASTNode& parent); NonnullRefPtr parse_primary_expression(ASTNode& parent); NonnullRefPtr parse_secondary_expression(ASTNode& parent, NonnullRefPtr lhs);