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