cpython/Modules/_multiprocessing/clinic/semaphore.c.h
Eric Snow 6f6a4e6cc5
gh-90928: Statically Initialize the Keywords Tuple in Clinic-Generated Code (gh-95860)
We only statically initialize for core code and builtin modules.  Extension modules still create
the tuple at runtime.  We'll solve that part of interpreter isolation separately.

This change includes generated code. The non-generated changes are in:

* Tools/clinic/clinic.py
* Python/getargs.c
* Include/cpython/modsupport.h
* Makefile.pre.in (re-generate global strings after running clinic)
* very minor tweaks to Modules/_codecsmodule.c and Python/Python-tokenize.c

All other changes are generated code (clinic, global strings).
2022-08-11 15:25:49 -06:00

575 lines
17 KiB
C
Generated

/*[clinic input]
preserve
[clinic start generated code]*/
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
# include "pycore_gc.h" // PyGC_Head
# include "pycore_runtime.h" // _Py_ID()
#endif
#if defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS)
PyDoc_STRVAR(_multiprocessing_SemLock_acquire__doc__,
"acquire($self, /, block=True, timeout=None)\n"
"--\n"
"\n"
"Acquire the semaphore/lock.");
#define _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF \
{"acquire", _PyCFunction_CAST(_multiprocessing_SemLock_acquire), METH_FASTCALL|METH_KEYWORDS, _multiprocessing_SemLock_acquire__doc__},
static PyObject *
_multiprocessing_SemLock_acquire_impl(SemLockObject *self, int blocking,
PyObject *timeout_obj);
static PyObject *
_multiprocessing_SemLock_acquire(SemLockObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
{
PyObject *return_value = NULL;
#define NUM_KEYWORDS 2
#if NUM_KEYWORDS == 0
# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
# else
# define KWTUPLE NULL
# endif
#else // NUM_KEYWORDS != 0
# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
static struct {
PyGC_Head _this_is_not_used;
PyObject_VAR_HEAD
PyObject *ob_item[NUM_KEYWORDS];
} _kwtuple = {
.ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
.ob_item = { &_Py_ID(block), &_Py_ID(timeout), },
};
# define KWTUPLE (&_kwtuple.ob_base.ob_base)
# else // !Py_BUILD_CORE
# define KWTUPLE NULL
# endif // !Py_BUILD_CORE
#endif // NUM_KEYWORDS != 0
#undef NUM_KEYWORDS
static const char * const _keywords[] = {"block", "timeout", NULL};
static _PyArg_Parser _parser = {
.keywords = _keywords,
.fname = "acquire",
.kwtuple = KWTUPLE,
};
#undef KWTUPLE
PyObject *argsbuf[2];
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
int blocking = 1;
PyObject *timeout_obj = Py_None;
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
if (!args) {
goto exit;
}
if (!noptargs) {
goto skip_optional_pos;
}
if (args[0]) {
blocking = _PyLong_AsInt(args[0]);
if (blocking == -1 && PyErr_Occurred()) {
goto exit;
}
if (!--noptargs) {
goto skip_optional_pos;
}
}
timeout_obj = args[1];
skip_optional_pos:
return_value = _multiprocessing_SemLock_acquire_impl(self, blocking, timeout_obj);
exit:
return return_value;
}
#endif /* defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS) */
#if defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS)
PyDoc_STRVAR(_multiprocessing_SemLock_release__doc__,
"release($self, /)\n"
"--\n"
"\n"
"Release the semaphore/lock.");
#define _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF \
{"release", (PyCFunction)_multiprocessing_SemLock_release, METH_NOARGS, _multiprocessing_SemLock_release__doc__},
static PyObject *
_multiprocessing_SemLock_release_impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock_release(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock_release_impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS) */
#if defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS)
PyDoc_STRVAR(_multiprocessing_SemLock_acquire__doc__,
"acquire($self, /, block=True, timeout=None)\n"
"--\n"
"\n"
"Acquire the semaphore/lock.");
#define _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF \
{"acquire", _PyCFunction_CAST(_multiprocessing_SemLock_acquire), METH_FASTCALL|METH_KEYWORDS, _multiprocessing_SemLock_acquire__doc__},
static PyObject *
_multiprocessing_SemLock_acquire_impl(SemLockObject *self, int blocking,
PyObject *timeout_obj);
static PyObject *
_multiprocessing_SemLock_acquire(SemLockObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
{
PyObject *return_value = NULL;
#define NUM_KEYWORDS 2
#if NUM_KEYWORDS == 0
# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
# else
# define KWTUPLE NULL
# endif
#else // NUM_KEYWORDS != 0
# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
static struct {
PyGC_Head _this_is_not_used;
PyObject_VAR_HEAD
PyObject *ob_item[NUM_KEYWORDS];
} _kwtuple = {
.ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
.ob_item = { &_Py_ID(block), &_Py_ID(timeout), },
};
# define KWTUPLE (&_kwtuple.ob_base.ob_base)
# else // !Py_BUILD_CORE
# define KWTUPLE NULL
# endif // !Py_BUILD_CORE
#endif // NUM_KEYWORDS != 0
#undef NUM_KEYWORDS
static const char * const _keywords[] = {"block", "timeout", NULL};
static _PyArg_Parser _parser = {
.keywords = _keywords,
.fname = "acquire",
.kwtuple = KWTUPLE,
};
#undef KWTUPLE
PyObject *argsbuf[2];
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
int blocking = 1;
PyObject *timeout_obj = Py_None;
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
if (!args) {
goto exit;
}
if (!noptargs) {
goto skip_optional_pos;
}
if (args[0]) {
blocking = _PyLong_AsInt(args[0]);
if (blocking == -1 && PyErr_Occurred()) {
goto exit;
}
if (!--noptargs) {
goto skip_optional_pos;
}
}
timeout_obj = args[1];
skip_optional_pos:
return_value = _multiprocessing_SemLock_acquire_impl(self, blocking, timeout_obj);
exit:
return return_value;
}
#endif /* defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS) */
#if defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS)
PyDoc_STRVAR(_multiprocessing_SemLock_release__doc__,
"release($self, /)\n"
"--\n"
"\n"
"Release the semaphore/lock.");
#define _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF \
{"release", (PyCFunction)_multiprocessing_SemLock_release, METH_NOARGS, _multiprocessing_SemLock_release__doc__},
static PyObject *
_multiprocessing_SemLock_release_impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock_release(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock_release_impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS) */
#if defined(HAVE_MP_SEMAPHORE)
static PyObject *
_multiprocessing_SemLock_impl(PyTypeObject *type, int kind, int value,
int maxvalue, const char *name, int unlink);
static PyObject *
_multiprocessing_SemLock(PyTypeObject *type, PyObject *args, PyObject *kwargs)
{
PyObject *return_value = NULL;
#define NUM_KEYWORDS 5
#if NUM_KEYWORDS == 0
# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
# else
# define KWTUPLE NULL
# endif
#else // NUM_KEYWORDS != 0
# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
static struct {
PyGC_Head _this_is_not_used;
PyObject_VAR_HEAD
PyObject *ob_item[NUM_KEYWORDS];
} _kwtuple = {
.ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
.ob_item = { &_Py_ID(kind), &_Py_ID(value), &_Py_ID(maxvalue), &_Py_ID(name), &_Py_ID(unlink), },
};
# define KWTUPLE (&_kwtuple.ob_base.ob_base)
# else // !Py_BUILD_CORE
# define KWTUPLE NULL
# endif // !Py_BUILD_CORE
#endif // NUM_KEYWORDS != 0
#undef NUM_KEYWORDS
static const char * const _keywords[] = {"kind", "value", "maxvalue", "name", "unlink", NULL};
static _PyArg_Parser _parser = {
.keywords = _keywords,
.fname = "SemLock",
.kwtuple = KWTUPLE,
};
#undef KWTUPLE
PyObject *argsbuf[5];
PyObject * const *fastargs;
Py_ssize_t nargs = PyTuple_GET_SIZE(args);
int kind;
int value;
int maxvalue;
const char *name;
int unlink;
fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 5, 5, 0, argsbuf);
if (!fastargs) {
goto exit;
}
kind = _PyLong_AsInt(fastargs[0]);
if (kind == -1 && PyErr_Occurred()) {
goto exit;
}
value = _PyLong_AsInt(fastargs[1]);
if (value == -1 && PyErr_Occurred()) {
goto exit;
}
maxvalue = _PyLong_AsInt(fastargs[2]);
if (maxvalue == -1 && PyErr_Occurred()) {
goto exit;
}
if (!PyUnicode_Check(fastargs[3])) {
_PyArg_BadArgument("SemLock", "argument 'name'", "str", fastargs[3]);
goto exit;
}
Py_ssize_t name_length;
name = PyUnicode_AsUTF8AndSize(fastargs[3], &name_length);
if (name == NULL) {
goto exit;
}
if (strlen(name) != (size_t)name_length) {
PyErr_SetString(PyExc_ValueError, "embedded null character");
goto exit;
}
unlink = _PyLong_AsInt(fastargs[4]);
if (unlink == -1 && PyErr_Occurred()) {
goto exit;
}
return_value = _multiprocessing_SemLock_impl(type, kind, value, maxvalue, name, unlink);
exit:
return return_value;
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock__rebuild__doc__,
"_rebuild($type, handle, kind, maxvalue, name, /)\n"
"--\n"
"\n");
#define _MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF \
{"_rebuild", _PyCFunction_CAST(_multiprocessing_SemLock__rebuild), METH_FASTCALL|METH_CLASS, _multiprocessing_SemLock__rebuild__doc__},
static PyObject *
_multiprocessing_SemLock__rebuild_impl(PyTypeObject *type, SEM_HANDLE handle,
int kind, int maxvalue,
const char *name);
static PyObject *
_multiprocessing_SemLock__rebuild(PyTypeObject *type, PyObject *const *args, Py_ssize_t nargs)
{
PyObject *return_value = NULL;
SEM_HANDLE handle;
int kind;
int maxvalue;
const char *name;
if (!_PyArg_ParseStack(args, nargs, ""F_SEM_HANDLE"iiz:_rebuild",
&handle, &kind, &maxvalue, &name)) {
goto exit;
}
return_value = _multiprocessing_SemLock__rebuild_impl(type, handle, kind, maxvalue, name);
exit:
return return_value;
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock__count__doc__,
"_count($self, /)\n"
"--\n"
"\n"
"Num of `acquire()`s minus num of `release()`s for this process.");
#define _MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF \
{"_count", (PyCFunction)_multiprocessing_SemLock__count, METH_NOARGS, _multiprocessing_SemLock__count__doc__},
static PyObject *
_multiprocessing_SemLock__count_impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock__count(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock__count_impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock__is_mine__doc__,
"_is_mine($self, /)\n"
"--\n"
"\n"
"Whether the lock is owned by this thread.");
#define _MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF \
{"_is_mine", (PyCFunction)_multiprocessing_SemLock__is_mine, METH_NOARGS, _multiprocessing_SemLock__is_mine__doc__},
static PyObject *
_multiprocessing_SemLock__is_mine_impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock__is_mine(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock__is_mine_impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock__get_value__doc__,
"_get_value($self, /)\n"
"--\n"
"\n"
"Get the value of the semaphore.");
#define _MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF \
{"_get_value", (PyCFunction)_multiprocessing_SemLock__get_value, METH_NOARGS, _multiprocessing_SemLock__get_value__doc__},
static PyObject *
_multiprocessing_SemLock__get_value_impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock__get_value(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock__get_value_impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock__is_zero__doc__,
"_is_zero($self, /)\n"
"--\n"
"\n"
"Return whether semaphore has value zero.");
#define _MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF \
{"_is_zero", (PyCFunction)_multiprocessing_SemLock__is_zero, METH_NOARGS, _multiprocessing_SemLock__is_zero__doc__},
static PyObject *
_multiprocessing_SemLock__is_zero_impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock__is_zero(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock__is_zero_impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock__after_fork__doc__,
"_after_fork($self, /)\n"
"--\n"
"\n"
"Rezero the net acquisition count after fork().");
#define _MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF \
{"_after_fork", (PyCFunction)_multiprocessing_SemLock__after_fork, METH_NOARGS, _multiprocessing_SemLock__after_fork__doc__},
static PyObject *
_multiprocessing_SemLock__after_fork_impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock__after_fork(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock__after_fork_impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock___enter____doc__,
"__enter__($self, /)\n"
"--\n"
"\n"
"Enter the semaphore/lock.");
#define _MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF \
{"__enter__", (PyCFunction)_multiprocessing_SemLock___enter__, METH_NOARGS, _multiprocessing_SemLock___enter____doc__},
static PyObject *
_multiprocessing_SemLock___enter___impl(SemLockObject *self);
static PyObject *
_multiprocessing_SemLock___enter__(SemLockObject *self, PyObject *Py_UNUSED(ignored))
{
return _multiprocessing_SemLock___enter___impl(self);
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#if defined(HAVE_MP_SEMAPHORE)
PyDoc_STRVAR(_multiprocessing_SemLock___exit____doc__,
"__exit__($self, exc_type=None, exc_value=None, exc_tb=None, /)\n"
"--\n"
"\n"
"Exit the semaphore/lock.");
#define _MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF \
{"__exit__", _PyCFunction_CAST(_multiprocessing_SemLock___exit__), METH_FASTCALL, _multiprocessing_SemLock___exit____doc__},
static PyObject *
_multiprocessing_SemLock___exit___impl(SemLockObject *self,
PyObject *exc_type,
PyObject *exc_value, PyObject *exc_tb);
static PyObject *
_multiprocessing_SemLock___exit__(SemLockObject *self, PyObject *const *args, Py_ssize_t nargs)
{
PyObject *return_value = NULL;
PyObject *exc_type = Py_None;
PyObject *exc_value = Py_None;
PyObject *exc_tb = Py_None;
if (!_PyArg_CheckPositional("__exit__", nargs, 0, 3)) {
goto exit;
}
if (nargs < 1) {
goto skip_optional;
}
exc_type = args[0];
if (nargs < 2) {
goto skip_optional;
}
exc_value = args[1];
if (nargs < 3) {
goto skip_optional;
}
exc_tb = args[2];
skip_optional:
return_value = _multiprocessing_SemLock___exit___impl(self, exc_type, exc_value, exc_tb);
exit:
return return_value;
}
#endif /* defined(HAVE_MP_SEMAPHORE) */
#ifndef _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF
#define _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF
#define _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF
#define _MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF
#define _MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF
#define _MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF
#define _MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF
#define _MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF
#define _MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF
#define _MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF) */
#ifndef _MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF
#define _MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF
#endif /* !defined(_MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF) */
/*[clinic end generated code: output=7eaf752dcfef6204 input=a9049054013a1b77]*/