diff --git a/src/language/node_processor/AffectationProcessor.hpp b/src/language/node_processor/AffectationProcessor.hpp
index 8e30fae597f02a1b000943cc6bf590edef35fd4f..151ede8378622be2a25fc30087091ac72a14047e 100644
--- a/src/language/node_processor/AffectationProcessor.hpp
+++ b/src/language/node_processor/AffectationProcessor.hpp
@@ -137,8 +137,8 @@ class ComponentAffectationExecutor final : public IAffectationExecutor
   }()};
 
  public:
-  ComponentAffectationExecutor(ASTNode& node, ArrayT& lhs_array)
-    : m_lhs_array{lhs_array}, m_index_expression{*node.children[1]}
+  ComponentAffectationExecutor(ASTNode& node, ArrayT& lhs_array, ASTNode& index_expression)
+    : m_lhs_array{lhs_array}, m_index_expression{index_expression}
   {
     // LCOV_EXCL_START
     if constexpr (not _is_defined) {
@@ -235,14 +235,17 @@ class AffectationProcessor final : public INodeProcessor
 
       const std::string& symbol = array_expression.string();
 
-      auto [i_symbol, found] = m_node.m_symbol_table->find(symbol, m_node.children[0]->begin());
+      auto [i_symbol, found] = m_node.m_symbol_table->find(symbol, array_subscript_expression.begin());
       Assert(found);
       DataVariant& value = i_symbol->attributes().value();
 
       if (array_expression.m_data_type != ASTNodeDataType::vector_t) {
-        throw parse_error("unexpected error: invalid lhs (expecting R^d)", std::vector{node.children[0]->begin()});
+        throw parse_error("unexpected error: invalid lhs (expecting R^d)",
+                          std::vector{array_subscript_expression.begin()});
       }
 
+      auto& index_expression = *array_subscript_expression.children[1];
+
       switch (array_expression.m_data_type.dimension()) {
       case 1: {
         using ArrayTypeT = TinyVector<1>;
@@ -250,7 +253,8 @@ class AffectationProcessor final : public INodeProcessor
           value = ArrayTypeT{};
         }
         using AffectationExecutorT = ComponentAffectationExecutor<OperatorT, ArrayTypeT, ValueT, DataT>;
-        m_affectation_executor     = std::make_unique<AffectationExecutorT>(m_node, std::get<ArrayTypeT>(value));
+        m_affectation_executor =
+          std::make_unique<AffectationExecutorT>(node, std::get<ArrayTypeT>(value), index_expression);
         break;
       }
       case 2: {
@@ -259,7 +263,8 @@ class AffectationProcessor final : public INodeProcessor
           value = ArrayTypeT{};
         }
         using AffectationExecutorT = ComponentAffectationExecutor<OperatorT, ArrayTypeT, ValueT, DataT>;
-        m_affectation_executor     = std::make_unique<AffectationExecutorT>(m_node, std::get<ArrayTypeT>(value));
+        m_affectation_executor =
+          std::make_unique<AffectationExecutorT>(node, std::get<ArrayTypeT>(value), index_expression);
         break;
       }
       case 3: {
@@ -268,11 +273,13 @@ class AffectationProcessor final : public INodeProcessor
           value = ArrayTypeT{};
         }
         using AffectationExecutorT = ComponentAffectationExecutor<OperatorT, ArrayTypeT, ValueT, DataT>;
-        m_affectation_executor     = std::make_unique<AffectationExecutorT>(m_node, std::get<ArrayTypeT>(value));
+        m_affectation_executor =
+          std::make_unique<AffectationExecutorT>(node, std::get<ArrayTypeT>(value), index_expression);
         break;
       }
       default: {
-        throw parse_error("unexpected error: invalid vector dimension", std::vector{node.children[0]->begin()});
+        throw parse_error("unexpected error: invalid vector dimension",
+                          std::vector{array_subscript_expression.begin()});
       }
       }