The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.7 KiB
59 lines
1.7 KiB
#include <Python.h> |
|
#include <stdio.h> |
|
|
|
#ifdef Py_LIMITED_API |
|
#error Py_LIMITED_API must not be defined. |
|
#endif |
|
|
|
/* This function explicitly calls functions whose declaration is elided when |
|
* Py_LIMITED_API is defined. This is to test that the linker is actually |
|
* linking to the right version of the library on Windows. */ |
|
static PyObject *meth_not_limited(PyObject *self, PyObject *args) |
|
{ |
|
PyObject *list; |
|
Py_ssize_t size; |
|
|
|
if (!PyArg_ParseTuple(args, "o", & list)) |
|
return NULL; |
|
|
|
if (!PyList_Check(list)) { |
|
PyErr_Format(PyExc_TypeError, "expected 'list'"); |
|
return NULL; |
|
} |
|
|
|
/* PyList_GET_SIZE and PyList_GET_ITEM are only available if Py_LIMITED_API |
|
* is not defined. It seems likely that they will remain excluded from the |
|
* limited API as their checked counterparts (PyList_GetSize and |
|
* PyList_GetItem) are made available in that mode instead. */ |
|
size = PyList_GET_SIZE(list); |
|
for(Py_ssize_t i = 0; i < size; ++i) { |
|
PyObject *element = PyList_GET_ITEM(list, i); |
|
if (element == NULL) { |
|
return NULL; |
|
} |
|
|
|
if(PyObject_Print(element, stdout, Py_PRINT_RAW) == -1) { |
|
return NULL; |
|
} |
|
} |
|
|
|
Py_RETURN_NONE; |
|
} |
|
|
|
static struct PyMethodDef not_limited_methods[] = { |
|
{ "not_limited", meth_not_limited, METH_VARARGS, |
|
"Calls functions whose declaration is elided by Py_LIMITED_API" }, |
|
{ NULL, NULL, 0, NULL } |
|
}; |
|
|
|
static struct PyModuleDef not_limited_module = { |
|
PyModuleDef_HEAD_INIT, |
|
"not_limited_api_test", |
|
NULL, |
|
-1, |
|
not_limited_methods |
|
}; |
|
|
|
PyMODINIT_FUNC PyInit_not_limited(void) { |
|
return PyModule_Create(¬_limited_module); |
|
}
|
|
|