From df361ede5e694c41095d7be4eabf86d0ee6a1162 Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Fri, 18 Apr 2025 09:53:43 +0000
Subject: [PATCH] fix function parameter parser

---
 src/Parser/Parser.cpp |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp
index 3e2bde8..3934023 100644
--- a/src/Parser/Parser.cpp
+++ b/src/Parser/Parser.cpp
@@ -142,6 +142,28 @@
         id_token.column_number);
 }
 
+// Parse a return statement, e.g., return; or return expression;
+void Parser::parseReturnStatement() {
+    // Consume 'return' keyword
+    auto returnToken = expect(Lexer::Tokens::Type::KEYWORD_RETURN);
+    // Parse optional expression
+    ParsedExpressionPtr expr = nullptr;
+    if (!(currentToken().type == Lexer::Tokens::Type::PUNCTUATION && currentToken().value == ";")) {
+        expr = parseParsedExpression(Symbols::Variables::Type::NULL_TYPE);
+    }
+    // Record return operation
+    Interpreter::OperationsFactory::callReturn(
+        expr,
+        Symbols::SymbolContainer::instance()->currentScopeName(),
+        this->current_filename_,
+        returnToken.line_number,
+        returnToken.column_number);
+    // Consume terminating semicolon
+    expect(Lexer::Tokens::Type::PUNCTUATION, ";");
+}
+
+// Continue with numeric literal parsing
+//
 Symbols::Value Parser::parseNumericLiteral(const std::string & value, bool is_negative, Symbols::Variables::Type type) {
     try {
         switch (type) {

--
Gitblit v1.9.3