Module Import alias Assign NameStore Call AttributeLoad NameLoad attr Expr Call AttributeLoad NameLoad attr Str Expr Call AttributeLoad NameLoad attr Str Str Expr Call AttributeLoad NameLoad attr ImportFrom alias alias FunctionDef arguments args NameParam NameParam defaults body If CompareEq NameLoad Num body Assign NameStore Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call AttributeLoad NameLoad attr NameLoad Print TupleLoad NameLoad NameLoad NameLoad orelse If CompareEq NameLoad Num body Assign NameStore Call AttributeLoad NameLoad attr NameLoad Print Str SubscriptLoad Call AttributeLoad NameLoad attr Str NameLoad Index Num orelse If CompareEq NameLoad Num body Assign NameStore Call AttributeLoad NameLoad attr NameLoad Assign NameStore Call AttributeLoad NameLoad attr NameLoad Print TupleLoad NameLoad NameLoad orelse Raise Call NameLoad NameLoad Return Num decorator_list Call AttributeLoad NameLoad attr Print Call AttributeLoad NameLoad attr Num
N/A N/A cffi N/A ffi N/A N/A cffi FFI N/A N/A N/A ffi cdef 
    int my_algo(int);
    typedef ... va_list;
    extern "Python" int f(int, va_list *);

    int fetch_int(va_list *);
    double fetch_double(va_list *);
    void *fetch_ptr(va_list *);
 N/A N/A N/A ffi set_source _extern_python_cffi 
    #include <stdarg.h>

    static int f(int, va_list *);

    static int f1(int n, ...)
    {
        va_list ap;
        va_start(ap, n);
        int res = f(n, &ap);
        va_end(ap);
        return res;
    }

    static int fetch_int(va_list *va) { return va_arg((*va), int); }
    static double fetch_double(va_list *va) { return va_arg((*va), double); }
    static void * fetch_ptr(va_list *va) { return va_arg((*va), void *); }
    
    static int my_algo(int n) {
        return f1(3, n, n+1, n+2) + f1(1, &n) + f1(2, 12.3, 45.6);
    }
 N/A N/A N/A ffi compile _extern_python_cffi ffi lib f N/A N/A n va N/A N/A N/A N/A n 3 N/A N/A x N/A N/A lib fetch_int va N/A y N/A N/A lib fetch_int va N/A z N/A N/A lib fetch_int va N/A N/A x y z N/A N/A N/A n 1 N/A N/A ptr N/A N/A lib fetch_ptr va N/A ptr to: N/A N/A N/A ffi cast int * ptr N/A 0 N/A N/A N/A n 2 N/A N/A x N/A N/A lib fetch_double va N/A y N/A N/A lib fetch_double va N/A N/A x y N/A N/A N/A AssertionError n N/A 14 N/A N/A N/A ffi def_extern N/A N/A N/A lib my_algo 10