diff --git a/src/ast/expression/BinaryExpression.cpp b/src/ast/expression/BinaryExpression.cpp
index 8768e18..ce7beee 100644
--- a/src/ast/expression/BinaryExpression.cpp
+++ b/src/ast/expression/BinaryExpression.cpp
@@ -16,10 +16,37 @@
* along with Zhivo. If not, see .
*/
+#include
#include
+#include
#include
DynamicObject BinaryExpression::visit(SymbolTable& symbols) {
+ if(auto* varAccess = dynamic_cast(this->left.get())) {
+ DynamicObject rValue = this->right->visit(symbols);
+ symbols.setSymbol(varAccess->getName().getImage(), rValue);
+
+ return rValue;
+ }
+ else if(auto* arrayAccess = dynamic_cast(this->left.get())) {
+ auto arrayExpr = arrayAccess->getArrayExpression();
+ auto arrayIdx = arrayAccess->getIndexExpression();
+
+ DynamicObject arrayVal = arrayExpr->visit(symbols);
+ if(!arrayVal.isArray())
+ throw std::runtime_error("Error updating array element (1)");
+
+ DynamicObject indexVal = arrayIdx->visit(symbols);
+ if(!indexVal.isNumber())
+ throw std::runtime_error("Error updating array element (2)");
+
+ DynamicObject rValue = this->right->visit(symbols);
+ std::unique_ptr rValuePtr = std::make_unique(rValue);
+
+ arrayVal.setArrayElement((int) indexVal.getNumber(), std::move(rValuePtr));
+ return arrayVal;
+ }
+
DynamicObject lValue = this->left->visit(symbols);
DynamicObject rValue = this->right->visit(symbols);