diff --git a/src/AST/array.py b/src/AST/array.py index 1d6f7cc..e693ab8 100644 --- a/src/AST/array.py +++ b/src/AST/array.py @@ -204,5 +204,12 @@ def get_tree(self, level=0): return LEVEL_STR * level + self.type + ' ' + str(self.id) + '\n' + self.indexes.get_tree(level+1) + '\n' + self.items.get_tree(level+1) def exe(self): - indexes = self.indexes.exe() items = self.items.exe() + keys = list(Array_get(self.id, self.indexes).exe()[0].keys()) + if len(keys) == len(items): + for i in range(len(items)): + index = deepcopy(self.indexes) + index.add_index(Integer(keys[i])) + Array_assign(self.id, index, items[i]).exe() + else: + add_error_message(f'Cannot assign to `{self.id}` because they are not the same size', self) diff --git a/src/parse.py b/src/parse.py index 944feb0..a0cefa0 100644 --- a/src/parse.py +++ b/src/parse.py @@ -84,6 +84,7 @@ def p_array_total_assign_statement(p): def p_array_index_total_assign_statement(p): """statement : ID LEFT_SQUARE indexes RIGHT_SQUARE ASSIGN LEFT_SQUARE array_items RIGHT_SQUARE""" + p[0] = AST.Array_indexes_total_assign(p[1], p[3], p[7]) def p_array_items(p): """array_items : array_items COMMA expression