浏览代码

LibCpp: Support parsing empty return statements

Itamar 4 年之前
父节点
当前提交
ee35fc0da3
共有 2 个文件被更改,包括 7 次插入4 次删除
  1. 2 1
      Userland/Libraries/LibCpp/AST.cpp
  2. 5 3
      Userland/Libraries/LibCpp/Parser.cpp

+ 2 - 1
Userland/Libraries/LibCpp/AST.cpp

@@ -249,7 +249,8 @@ void StringLiteral::dump(size_t indent) const
 void ReturnStatement::dump(size_t indent) const
 {
     ASTNode::dump(indent);
-    m_value->dump(indent + 1);
+    if(m_value)
+        m_value->dump(indent + 1);
 }
 
 void EnumDeclaration::dump(size_t indent) const

+ 5 - 3
Userland/Libraries/LibCpp/Parser.cpp

@@ -901,9 +901,11 @@ NonnullRefPtr<ReturnStatement> Parser::parse_return_statement(ASTNode& parent)
     SCOPE_LOGGER();
     auto return_statement = create_ast_node<ReturnStatement>(parent, position(), {});
     consume(Token::Type::Keyword);
-    auto expression = parse_expression(*return_statement);
-    return_statement->m_value = expression;
-    return_statement->set_end(expression->end());
+    if(!peek(Token::Type::Semicolon).has_value()) {
+        auto expression = parse_expression(*return_statement);
+        return_statement->m_value = expression;
+    }
+    return_statement->set_end(position());
     return return_statement;
 }