-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathop_array.py
38 lines (32 loc) · 902 Bytes
/
op_array.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""Built-in array operators for stilted."""
from evaluate import operator, Engine
from dtypes import Array, Integer, MARK
from util import rangecheck
@operator("[")
def mark_(engine: Engine) -> None:
engine.opush(MARK)
@operator("]")
def array_(engine: Engine) -> None:
n = engine.counttomark()
objs = engine.opopn(n)
engine.opop() # the mark
engine.opush(engine.new_array(value=objs))
@operator
def aload(engine: Engine) -> None:
arr = engine.opop(Array)
for obj in arr:
engine.opush(obj)
engine.opush(arr)
@operator
def array(engine: Engine) -> None:
n = engine.opop(Integer).value
rangecheck(0, n)
engine.opush(engine.new_array(n=n))
@operator
def astore(engine: Engine) -> None:
arr = engine.opop(Array)
larr = len(arr)
engine.ohas(larr)
for i in range(larr):
arr[larr - i - 1] = engine.opop()
engine.opush(arr)