From ea9af87ba4399d094180f06be59c878d864a17e0 Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Sat, 19 Apr 2025 17:06:48 +0000
Subject: [PATCH] implemented array, added some new builtin functions

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

diff --git a/src/Interpreter/ExpressionBuilder.hpp b/src/Interpreter/ExpressionBuilder.hpp
index 778dbf3..bb5fefa 100644
--- a/src/Interpreter/ExpressionBuilder.hpp
+++ b/src/Interpreter/ExpressionBuilder.hpp
@@ -11,6 +11,7 @@
 #include "Interpreter/UnaryExpressionNode.hpp"  // <-- új include
 #include "Interpreter/CallExpressionNode.hpp"
 #include "Interpreter/MemberExpressionNode.hpp"
+#include "Interpreter/ArrayAccessExpressionNode.hpp"
 #include "Interpreter/ObjectExpressionNode.hpp"
 #include "Interpreter/ObjectExpressionNode.hpp"
 #include "Parser/ParsedExpression.hpp"
@@ -29,10 +30,16 @@
 
         case Kind::Binary:
             {
+                // Array/object dynamic indexing: operator []
+                if (expr->op == "[]") {
+                    auto arrExpr = buildExpressionFromParsed(expr->lhs);
+                    auto idxExpr = buildExpressionFromParsed(expr->rhs);
+                    return std::make_unique<Interpreter::ArrayAccessExpressionNode>(std::move(arrExpr), std::move(idxExpr));
+                }
+                // Member access for object properties: '->'
                 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>();
@@ -43,6 +50,7 @@
                     }
                     return std::make_unique<Interpreter::MemberExpressionNode>(std::move(objExpr), propName);
                 }
+                // Default binary operator
                 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