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