From 3d9e8a26930930a4b63143f800bfa28e5d3caaf6 Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Fri, 18 Apr 2025 19:35:21 +0000
Subject: [PATCH] fix object variable assigment

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

diff --git a/src/Parser/Parser.hpp b/src/Parser/Parser.hpp
index 56839fa..b8656e5 100644
--- a/src/Parser/Parser.hpp
+++ b/src/Parser/Parser.hpp
@@ -197,6 +197,19 @@
             parseCallStatement();
             return;
         }
+        // Assignment statement at top-level
+        if (currentToken().type == Lexer::Tokens::Type::VARIABLE_IDENTIFIER) {
+            size_t offset = 1;
+            // Skip member access chain
+            while (peekToken(offset).type == Lexer::Tokens::Type::PUNCTUATION && peekToken(offset).value == "->") {
+                offset += 2;
+            }
+            const auto & look = peekToken(offset);
+            if (look.type == Lexer::Tokens::Type::OPERATOR_ASSIGNMENT && look.value == "=") {
+                parseAssignmentStatement();
+                return;
+            }
+        }
 
         reportError("Unexpected token at beginning of statement");
     }
@@ -205,6 +218,8 @@
     void parseFunctionDefinition();
     // Parse a top-level function call statement (e.g., foo(arg1, arg2);)
     void parseCallStatement();
+    // Parse a top-level assignment statement (variable or object member)
+    void parseAssignmentStatement();
     // Parse a return statement (e.g., return; or return expr;)
     void parseReturnStatement();
     // Parse an if-else conditional statement

--
Gitblit v1.9.3