summaryrefslogtreecommitdiff
path: root/testing/embedding/add_recursive.py
blob: 9fa463df86e302b266cb26b66b48747f021f5a75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import cffi

ffi = cffi.FFI()

ffi.embedding_api("""
    int (*my_callback)(int);
    int add_rec(int, int);
""")

ffi.embedding_init_code(r"""
    from _add_recursive_cffi import ffi, lib
    import sys
    print("preparing REC")
    sys.stdout.flush()

    @ffi.def_extern()
    def add_rec(x, y):
        print("adding %d and %d" % (x, y))
        sys.stdout.flush()
        return x + y

    x = lib.my_callback(400)
    print('<<< %d >>>' % (x,))
""")

ffi.set_source("_add_recursive_cffi", """
/* use CFFI_DLLEXPORT: on windows, it expands to __declspec(dllexport),
   which is needed to export a variable from a dll */
CFFI_DLLEXPORT int (*my_callback)(int);
""")

fn = ffi.compile(verbose=True)
print('FILENAME: %s' % (fn,))