From fcb28cc03f93a4b00ec181a8492432dfa0e5fa11 Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Fri, 18 Apr 2025 06:00:25 +0000
Subject: [PATCH] replace hungarian comment to english

---
 src/Parser/Parser.cpp |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp
index 38ff418..9e8ad75 100644
--- a/src/Parser/Parser.cpp
+++ b/src/Parser/Parser.cpp
@@ -4,7 +4,7 @@
 #include "Interpreter/OperationsFactory.hpp"
 #include "Lexer/Operators.hpp"
 
-// Más szükséges include-ok, ha kellenek
+// Additional necessary includes, if needed
 namespace Parser {
 
 const std::unordered_map<std::string, Lexer::Tokens::Type> Parser::keywords = {
@@ -14,11 +14,11 @@
     { "for",      Lexer::Tokens::Type::KEYWORD                      },
     { "return",   Lexer::Tokens::Type::KEYWORD_RETURN               },
     { "function", Lexer::Tokens::Type::KEYWORD_FUNCTION_DECLARATION },
-    // Régebbiek:
+    // Older keywords:
     { "const",    Lexer::Tokens::Type::KEYWORD                      },
     { "true",     Lexer::Tokens::Type::KEYWORD                      },
     { "false",    Lexer::Tokens::Type::KEYWORD                      },
-    // változó típusok
+    // variable types
     { "null",     Lexer::Tokens::Type::KEYWORD_NULL                 },
     { "int",      Lexer::Tokens::Type::KEYWORD_INT                  },
     { "double",   Lexer::Tokens::Type::KEYWORD_DOUBLE               },
@@ -26,7 +26,7 @@
     { "string",   Lexer::Tokens::Type::KEYWORD_STRING               },
     { "boolean",  Lexer::Tokens::Type::KEYWORD_BOOLEAN              },
     { "bool",     Lexer::Tokens::Type::KEYWORD_BOOLEAN              },
-    // ... egyéb kulcsszavak ...
+    // ... other keywords ...
 };
 
 const std::unordered_map<Lexer::Tokens::Type, Symbols::Variables::Type> Parser::variable_types = {
@@ -69,29 +69,29 @@
 
     if (currentToken().type != Lexer::Tokens::Type::PUNCTUATION || currentToken().value != ")") {
         while (true) {
-            // Paraméter típusa
-            Symbols::Variables::Type param_type = parseType();  // Ez elfogyasztja a type tokent
+            // Parameter type
+            Symbols::Variables::Type param_type = parseType();  // This consumes the type token
 
-            // Paraméter név ($variable)
+            // Parameter name ($variable)
             Lexer::Tokens::Token param_id_token = expect(Lexer::Tokens::Type::VARIABLE_IDENTIFIER);
             std::string          param_name     = param_id_token.value;
-            if (!param_name.empty() && param_name[0] == '$') {  // '$' eltávolítása
+            if (!param_name.empty() && param_name[0] == '$') {  // remove '$'
                 param_name = param_name.substr(1);
             }
 
             param_infos.push_back({ param_name, param_type });
 
-            // Vessző vagy zárójel következik?
+            // Expecting comma or closing parenthesis?
             if (match(Lexer::Tokens::Type::PUNCTUATION, ",")) {
                 continue;
             }
             if (currentToken().type == Lexer::Tokens::Type::PUNCTUATION && currentToken().value == ")") {
-                break;  // Lista vége
+                break;  // end of list
             }
             reportError("Expected ',' or ')' in parameter list");
         }
     }
-    // Most a ')' következik
+    // Now expect ')'
     expect(Lexer::Tokens::Type::PUNCTUATION, ")");
 
     // check if we have a option return type: function name() type { ... }
@@ -182,8 +182,9 @@
     expect(Lexer::Tokens::Type::PUNCTUATION, "}");
     const std::string newns = Symbols::SymbolContainer::instance()->currentScopeName() + "." + function_name;
     Symbols::SymbolContainer::instance()->create(newns);
-    std::shared_ptr<Parser> parser = std::make_shared<Parser>();
-    parser->parseScript(filtered_tokens, input_string, this->current_filename_);
+    // Parse function body using a stack‑allocated Parser (avoid heap allocations)
+    Parser innerParser;
+    innerParser.parseScript(filtered_tokens, input_string, this->current_filename_);
     Symbols::SymbolContainer::instance()->enterPreviousScope();
     // create function
     Interpreter::OperationsFactory::defineFunction(
@@ -194,6 +195,10 @@
 ParsedExpressionPtr Parser::parseParsedExpression(const Symbols::Variables::Type & expected_var_type) {
     std::stack<std::string>          operator_stack;
     std::vector<ParsedExpressionPtr> output_queue;
+    // Reserve output queue to reduce reallocations
+    if (tokens_.size() > current_token_index_) {
+        output_queue.reserve(tokens_.size() - current_token_index_);
+    }
 
     bool expect_unary = true;
 
@@ -238,7 +243,7 @@
             std::string op = std::string(token.lexeme);
 
             if (expect_unary && Lexer::isUnaryOperator(op)) {
-                op = "u" + op;  // pl. u-, u+ vagy u!
+                op = "u" + op;  // e.g. u-, u+ or u!
             }
 
             while (!operator_stack.empty()) {
@@ -285,7 +290,7 @@
         }
     }
 
-    // Kiürítjük az operator stack-et
+    // Empty the operator stack
     while (!operator_stack.empty()) {
         std::string op = operator_stack.top();
         operator_stack.pop();

--
Gitblit v1.9.3