1 # test native emitter can handle closures correctly
2 
3 # basic closure
4 @micropython.native
5 def f():
6     x = 1
7 
8     @micropython.native
9     def g():
10         nonlocal x
11         return x
12 
13     return g
14 
15 
16 print(f()())
17 
18 # closing over an argument
19 @micropython.native
20 def f(x):
21     @micropython.native
22     def g():
23         nonlocal x
24         return x
25 
26     return g
27 
28 
29 print(f(2)())
30 
31 # closing over an argument and a normal local
32 @micropython.native
33 def f(x):
34     y = 2 * x
35 
36     @micropython.native
37     def g(z):
38         return x + y + z
39 
40     return g
41 
42 
43 print(f(2)(3))
44