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.
60 lines
1.7 KiB
60 lines
1.7 KiB
2 years ago
|
#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);
|
||
|
}
|