1# mode: run
2# tag: closures
3# ticket: 554
4
5def call_f(x):
6    """
7    >>> call_f(2)
8    4
9    """
10    return f(x)
11
12
13cdef f(x):                # def  here => works fine
14   def g(y): return y*x   # cdef here => compile error
15   return g(x)            # faults@ INCREF(.*cur_scope->.*v_x
16
17
18def closure_in_void():
19    """
20    >>> genex = closure_in_void()
21    >>> list(genex)
22    ['a', 'b', 'c']
23    """
24    l = []
25    add_gen(l)
26    return l[0]
27
28
29cdef void add_gen(l):
30    x = "abc"
31    l.append((c for c in x))
32
33
34def closure_in_int():
35    """
36    >>> genex = closure_in_int()
37    >>> list(genex)
38    ['a', 'b', 'c']
39    """
40    l = []
41    add_gen_int(l)
42    return l[0]
43
44
45cdef int add_gen_int(l):
46    x = "abc"
47    l.append((c for c in x))
48