summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--tests/micropython/native_closure.py32
-rw-r--r--tests/micropython/native_closure.py.exp3
2 files changed, 35 insertions, 0 deletions
diff --git a/tests/micropython/native_closure.py b/tests/micropython/native_closure.py
new file mode 100644
index 0000000000..6c0592e52d
--- /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))
diff --git a/tests/micropython/native_closure.py.exp b/tests/micropython/native_closure.py.exp
new file mode 100644
index 0000000000..7f4277240f
--- /dev/null
+++ b/tests/micropython/native_closure.py.exp
@@ -0,0 +1,3 @@
+1
+2
+9