🐐 Array indexing

This commit is contained in:
2026-03-31 22:10:55 +02:00
parent cdad648f58
commit 58149b5f65
4 changed files with 41 additions and 7 deletions

View File

@@ -342,6 +342,24 @@ class UnaryMinus(Node):
return vtable, ValInt(-val.value())
class ArrayIndex(Node):
def __init__(self, array, index) -> None:
self.array = array
self.index = index
def __repr__(self) -> str:
return f"ArrayIndex({self.array!r}, {self.index!r})"
def _eval(self, vtable):
vtable, array = self.array.eval(vtable)
vtable, index = self.index.eval(vtable)
i = index.value()
lst = array.value()
if i < 1 or i > len(lst):
raise IndexError(f"Index {i} out of range for array of length {len(lst)}")
return vtable, lst[i - 1]
class SiStatement(Node):
def __init__(self, test, statements, else_part) -> None:
self.test = test