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