forked from M-Labs/nac3
lyken
fb9fe8edf2
- distinguish between setitem and getitem - allow starred assignment targets, but the assigned value would be a tuple - allow both [...] and (...) to be target lists
67 lines
1.3 KiB
Python
67 lines
1.3 KiB
Python
@extern
|
|
def output_int32(x: int32):
|
|
...
|
|
|
|
@extern
|
|
def output_bool(x: bool):
|
|
...
|
|
|
|
def example1():
|
|
x, *ys, z = (1, 2, 3, 4, 5)
|
|
output_int32(x)
|
|
output_int32(ys[0])
|
|
output_int32(ys[1])
|
|
output_int32(ys[2])
|
|
output_int32(z)
|
|
|
|
def example2():
|
|
x, y, *zs = (1, 2, 3, 4, 5)
|
|
output_int32(x)
|
|
output_int32(y)
|
|
output_int32(zs[0])
|
|
output_int32(zs[1])
|
|
output_int32(zs[2])
|
|
|
|
def example3():
|
|
*xs, y, z = (1, 2, 3, 4, 5)
|
|
output_int32(xs[0])
|
|
output_int32(xs[1])
|
|
output_int32(xs[2])
|
|
output_int32(y)
|
|
output_int32(z)
|
|
|
|
def example4():
|
|
# Example from: https://docs.python.org/3/reference/simple_stmts.html#assignment-statements
|
|
x = [0, 1]
|
|
i = 0
|
|
i, x[i] = 1, 2 # i is updated, then x[i] is updated
|
|
output_int32(i)
|
|
output_int32(x[0])
|
|
output_int32(x[1])
|
|
|
|
class A:
|
|
value: int32
|
|
def __init__(self):
|
|
self.value = 1000
|
|
|
|
def example5():
|
|
ws = [88, 7, 8]
|
|
a = A()
|
|
x, [y, *ys, a.value], ws[0], (ws[0],) = 1, (2, False, 4, 5), 99, (6,)
|
|
output_int32(x)
|
|
output_int32(y)
|
|
output_bool(ys[0])
|
|
output_int32(ys[1])
|
|
output_int32(a.value)
|
|
output_int32(ws[0])
|
|
output_int32(ws[1])
|
|
output_int32(ws[2])
|
|
|
|
def run() -> int32:
|
|
example1()
|
|
example2()
|
|
example3()
|
|
example4()
|
|
example5()
|
|
return 0
|