summaryrefslogtreecommitdiff
path: root/tests/micropython/native_closure.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/micropython/native_closure.py')
-rw-r--r--tests/micropython/native_closure.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/micropython/native_closure.py b/tests/micropython/native_closure.py
new file mode 100644
index 000000000..6c0592e52
--- /dev/null
+++ b/tests/micropython/native_closure.py
@@ -0,0 +1,32 @@
+# test native emitter can handle closures correctly
+
+# basic closure
+@micropython.native
+def f():
+ x = 1
+ @micropython.native
+ def g():
+ nonlocal x
+ return x
+ return g
+print(f()())
+
+# closing over an argument
+@micropython.native
+def f(x):
+ @micropython.native
+ def g():
+ nonlocal x
+ return x
+ return g
+print(f(2)())
+
+# closing over an argument and a normal local
+@micropython.native
+def f(x):
+ y = 2 * x
+ @micropython.native
+ def g(z):
+ return x + y + z
+ return g
+print(f(2)(3))