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)) diff --git a/tests/micropython/native_closure.py.exp b/tests/micropython/native_closure.py.exp new file mode 100644 index 000000000..7f4277240 --- /dev/null +++ b/tests/micropython/native_closure.py.exp @@ -0,0 +1,3 @@ +1 +2 +9