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