circuitpython/tests/micropython/native_closure.py

47 lines
561 B
Python
Raw Normal View History

# test native emitter can handle closures correctly
2023-02-01 03:08:41 -05:00
# basic closure
@micropython.native
def f():
x = 1
2021-03-15 09:57:36 -04:00
@micropython.native
def g():
nonlocal x
return x
2021-03-15 09:57:36 -04:00
return g
2021-03-15 09:57:36 -04:00
print(f()())
2023-02-01 03:08:41 -05:00
# closing over an argument
@micropython.native
def f(x):
@micropython.native
def g():
nonlocal x
return x
2021-03-15 09:57:36 -04:00
return g
2021-03-15 09:57:36 -04:00
print(f(2)())
2023-02-01 03:08:41 -05:00
# closing over an argument and a normal local
@micropython.native
def f(x):
y = 2 * x
2021-03-15 09:57:36 -04:00
@micropython.native
def g(z):
return x + y + z
2021-03-15 09:57:36 -04:00
return g
2021-03-15 09:57:36 -04:00
print(f(2)(3))