|
44 | 44 | \tPyTupleObject *capi_arglist = #name#_args_capi; |
45 | 45 | \tPyObject *capi_return = NULL; |
46 | 46 | \tPyObject *capi_tmp = NULL; |
| 47 | +\tPyObject *capi_arglist_list = NULL; |
47 | 48 | \tint capi_j,capi_i = 0; |
48 | 49 | \tint capi_longjmp_ok = 1; |
49 | 50 | #decl# |
|
85 | 86 | \t\tgoto capi_fail; |
86 | 87 | \t} |
87 | 88 | #setdims# |
| 89 | +#ifdef PYPY_VERSION |
| 90 | +#define CAPI_ARGLIST_SETITEM(idx, value) PyList_SetItem((PyObject *)capi_arglist_list, idx, value) |
| 91 | +\tcapi_arglist_list = PySequence_List(capi_arglist); |
| 92 | +\tif (capi_arglist_list == NULL) goto capi_fail; |
| 93 | +#else |
| 94 | +#define CAPI_ARGLIST_SETITEM(idx, value) PyTuple_SetItem((PyObject *)capi_arglist, idx, value) |
| 95 | +#endif |
88 | 96 | #pyobjfrom# |
| 97 | +#undef CAPI_ARGLIST_SETITEM |
| 98 | +#ifdef PYPY_VERSION |
| 99 | +\tCFUNCSMESSPY(\"cb:capi_arglist=\",capi_arglist_list); |
| 100 | +#else |
89 | 101 | \tCFUNCSMESSPY(\"cb:capi_arglist=\",capi_arglist); |
| 102 | +#endif |
90 | 103 | \tCFUNCSMESS(\"cb:Call-back calling Python function #argname#.\\n\"); |
91 | 104 | #ifdef F2PY_REPORT_ATEXIT |
92 | 105 | f2py_cb_start_call_clock(); |
93 | 106 | #endif |
| 107 | +#ifdef PYPY_VERSION |
| 108 | +\tcapi_return = PyObject_CallObject(#name#_capi,(PyObject *)capi_arglist_list); |
| 109 | +\tPy_DECREF(capi_arglist_list); |
| 110 | +\tcapi_arglist_list = NULL; |
| 111 | +#else |
94 | 112 | \tcapi_return = PyObject_CallObject(#name#_capi,(PyObject *)capi_arglist); |
| 113 | +#endif |
95 | 114 | #ifdef F2PY_REPORT_ATEXIT |
96 | 115 | f2py_cb_stop_call_clock(); |
97 | 116 | #endif |
|
119 | 138 | capi_fail: |
120 | 139 | \tfprintf(stderr,\"Call-back #name# failed.\\n\"); |
121 | 140 | \tPy_XDECREF(capi_return); |
| 141 | +\tPy_XDECREF(capi_arglist_list); |
122 | 142 | \tif (capi_longjmp_ok) |
123 | 143 | \t\tlongjmp(#name#_jmpbuf,-1); |
124 | 144 | capi_return_pt: |
|
318 | 338 | }, { |
319 | 339 | 'pyobjfrom': [{isintent_in:"""\ |
320 | 340 | \tif (#name#_nofargs>capi_i) |
321 | | -\t\tif (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyobj_from_#ctype#1(#varname_i#))) |
| 341 | +\t\tif (CAPI_ARGLIST_SETITEM(capi_i++,pyobj_from_#ctype#1(#varname_i#))) |
322 | 342 | \t\t\tgoto capi_fail;"""}, |
323 | 343 | {isintent_inout:"""\ |
324 | 344 | \tif (#name#_nofargs>capi_i) |
325 | | -\t\tif (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyarr_from_p_#ctype#1(#varname_i#_cb_capi))) |
| 345 | +\t\tif (CAPI_ARGLIST_SETITEM(capi_i++,pyarr_from_p_#ctype#1(#varname_i#_cb_capi))) |
326 | 346 | \t\t\tgoto capi_fail;"""}], |
327 | 347 | 'need': [{isintent_in:'pyobj_from_#ctype#1'}, |
328 | 348 | {isintent_inout:'pyarr_from_p_#ctype#1'}, |
|
343 | 363 | 'pyobjfrom': [{debugcapi:'\tfprintf(stderr,"debug-capi:cb:#varname#=\\"#showvalueformat#\\":%d:\\n",#varname_i#,#varname_i#_cb_len);'}, |
344 | 364 | {isintent_in:"""\ |
345 | 365 | \tif (#name#_nofargs>capi_i) |
346 | | -\t\tif (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyobj_from_#ctype#1size(#varname_i#,#varname_i#_cb_len))) |
| 366 | +\t\tif (CAPI_ARGLIST_SETITEM(capi_i++,pyobj_from_#ctype#1size(#varname_i#,#varname_i#_cb_len))) |
347 | 367 | \t\t\tgoto capi_fail;"""}, |
348 | 368 | {isintent_inout:"""\ |
349 | 369 | \tif (#name#_nofargs>capi_i) { |
350 | 370 | \t\tint #varname_i#_cb_dims[] = {#varname_i#_cb_len}; |
351 | | -\t\tif (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,pyarr_from_p_#ctype#1(#varname_i#,#varname_i#_cb_dims))) |
| 371 | +\t\tif (CAPI_ARGLIST_SETITEM(capi_i++,pyarr_from_p_#ctype#1(#varname_i#,#varname_i#_cb_dims))) |
352 | 372 | \t\t\tgoto capi_fail; |
353 | 373 | \t}"""}], |
354 | 374 | 'need': [{isintent_in:'pyobj_from_#ctype#1size'}, |
|
381 | 401 | """ |
382 | 402 | \t\tif (tmp_arr==NULL) |
383 | 403 | \t\t\tgoto capi_fail; |
384 | | -\t\tif (PyTuple_SetItem((PyObject *)capi_arglist,capi_i++,(PyObject *)tmp_arr)) |
| 404 | +\t\tif (CAPI_ARGLIST_SETITEM(capi_i++,(PyObject *)tmp_arr)) |
385 | 405 | \t\t\tgoto capi_fail; |
386 | 406 | }"""], |
387 | 407 | '_check':l_and(isarray,isintent_nothide,l_or(isintent_in,isintent_inout)), |
|