From 68693bb7b71bb5721bdda9dc16948b750ea71065 Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Fri, 18 Apr 2025 19:00:42 +0000
Subject: [PATCH] fix object accessing

---
 src/Interpreter/ExpressionBuilder.hpp |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/Interpreter/ExpressionBuilder.hpp b/src/Interpreter/ExpressionBuilder.hpp
index f5f4323..778dbf3 100644
--- a/src/Interpreter/ExpressionBuilder.hpp
+++ b/src/Interpreter/ExpressionBuilder.hpp
@@ -10,6 +10,8 @@
 #include "Interpreter/LiteralExpressionNode.hpp"
 #include "Interpreter/UnaryExpressionNode.hpp"  // <-- új include
 #include "Interpreter/CallExpressionNode.hpp"
+#include "Interpreter/MemberExpressionNode.hpp"
+#include "Interpreter/ObjectExpressionNode.hpp"
 #include "Interpreter/ObjectExpressionNode.hpp"
 #include "Parser/ParsedExpression.hpp"
 
@@ -27,6 +29,20 @@
 
         case Kind::Binary:
             {
+                if (expr->op == "->") {
+                    auto objExpr = buildExpressionFromParsed(expr->lhs);
+                    std::string propName;
+                    // RHS parsed expression should be a literal string or variable parser node
+                    if (expr->rhs->kind == ParsedExpression::Kind::Literal &&
+                        expr->rhs->value.getType() == Symbols::Variables::Type::STRING) {
+                        propName = expr->rhs->value.get<std::string>();
+                    } else if (expr->rhs->kind == ParsedExpression::Kind::Variable) {
+                        propName = expr->rhs->name;
+                    } else {
+                        throw std::runtime_error("Invalid property name in member access");
+                    }
+                    return std::make_unique<Interpreter::MemberExpressionNode>(std::move(objExpr), propName);
+                }
                 auto lhs = buildExpressionFromParsed(expr->lhs);
                 auto rhs = buildExpressionFromParsed(expr->rhs);
                 return std::make_unique<Interpreter::BinaryExpressionNode>(std::move(lhs), expr->op, std::move(rhs));

--
Gitblit v1.9.3