mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
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).
This commit is contained in:
parent
bdb2cf8e91
commit
6f6a4e6cc5
127 changed files with 16242 additions and 621 deletions
8
PC/clinic/_msi.c.h
generated
8
PC/clinic/_msi.c.h
generated
|
|
@ -2,6 +2,12 @@
|
|||
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
|
||||
|
||||
|
||||
PyDoc_STRVAR(_msi_UuidCreate__doc__,
|
||||
"UuidCreate($module, /)\n"
|
||||
"--\n"
|
||||
|
|
@ -689,4 +695,4 @@ _msi_CreateRecord(PyObject *module, PyObject *arg)
|
|||
exit:
|
||||
return return_value;
|
||||
}
|
||||
/*[clinic end generated code: output=a592695c4315db22 input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=583505220fadb52b input=a9049054013a1b77]*/
|
||||
|
|
|
|||
78
PC/clinic/_testconsole.c.h
generated
78
PC/clinic/_testconsole.c.h
generated
|
|
@ -2,6 +2,12 @@
|
|||
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(MS_WINDOWS)
|
||||
|
||||
PyDoc_STRVAR(_testconsole_write_input__doc__,
|
||||
|
|
@ -21,8 +27,41 @@ static PyObject *
|
|||
_testconsole_write_input(PyObject *module, 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(file), &_Py_ID(s), },
|
||||
};
|
||||
# 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[] = {"file", "s", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "write_input", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "write_input",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[2];
|
||||
PyObject *file;
|
||||
PyBytesObject *s;
|
||||
|
|
@ -63,8 +102,41 @@ static PyObject *
|
|||
_testconsole_read_output(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#define NUM_KEYWORDS 1
|
||||
#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(file), },
|
||||
};
|
||||
# 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[] = {"file", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "read_output", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "read_output",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[1];
|
||||
PyObject *file;
|
||||
|
||||
|
|
@ -88,4 +160,4 @@ exit:
|
|||
#ifndef _TESTCONSOLE_READ_OUTPUT_METHODDEF
|
||||
#define _TESTCONSOLE_READ_OUTPUT_METHODDEF
|
||||
#endif /* !defined(_TESTCONSOLE_READ_OUTPUT_METHODDEF) */
|
||||
/*[clinic end generated code: output=6e9f8b0766eb5a0e input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=73b7768a87e295a9 input=a9049054013a1b77]*/
|
||||
|
|
|
|||
8
PC/clinic/msvcrtmodule.c.h
generated
8
PC/clinic/msvcrtmodule.c.h
generated
|
|
@ -2,6 +2,12 @@
|
|||
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
|
||||
|
||||
|
||||
PyDoc_STRVAR(msvcrt_heapmin__doc__,
|
||||
"heapmin($module, /)\n"
|
||||
"--\n"
|
||||
|
|
@ -661,4 +667,4 @@ exit:
|
|||
#ifndef MSVCRT_SET_ERROR_MODE_METHODDEF
|
||||
#define MSVCRT_SET_ERROR_MODE_METHODDEF
|
||||
#endif /* !defined(MSVCRT_SET_ERROR_MODE_METHODDEF) */
|
||||
/*[clinic end generated code: output=9d89e9414484d28c input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=204bae9fee7f6124 input=a9049054013a1b77]*/
|
||||
|
|
|
|||
183
PC/clinic/winreg.c.h
generated
183
PC/clinic/winreg.c.h
generated
|
|
@ -2,6 +2,12 @@
|
|||
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
|
||||
|
||||
|
||||
PyDoc_STRVAR(winreg_HKEYType_Close__doc__,
|
||||
"Close($self, /)\n"
|
||||
"--\n"
|
||||
|
|
@ -87,8 +93,41 @@ static PyObject *
|
|||
winreg_HKEYType___exit__(PyHKEYObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#define NUM_KEYWORDS 3
|
||||
#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(exc_type), &_Py_ID(exc_value), &_Py_ID(traceback), },
|
||||
};
|
||||
# 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[] = {"exc_type", "exc_value", "traceback", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "__exit__", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "__exit__",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[3];
|
||||
PyObject *exc_type;
|
||||
PyObject *exc_value;
|
||||
|
|
@ -286,8 +325,41 @@ static PyObject *
|
|||
winreg_CreateKeyEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#define NUM_KEYWORDS 4
|
||||
#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(key), &_Py_ID(sub_key), &_Py_ID(reserved), &_Py_ID(access), },
|
||||
};
|
||||
# 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[] = {"key", "sub_key", "reserved", "access", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "CreateKeyEx", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "CreateKeyEx",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[4];
|
||||
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
|
||||
HKEY key;
|
||||
|
|
@ -440,8 +512,41 @@ static PyObject *
|
|||
winreg_DeleteKeyEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#define NUM_KEYWORDS 4
|
||||
#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(key), &_Py_ID(sub_key), &_Py_ID(access), &_Py_ID(reserved), },
|
||||
};
|
||||
# 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[] = {"key", "sub_key", "access", "reserved", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "DeleteKeyEx", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "DeleteKeyEx",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[4];
|
||||
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
|
||||
HKEY key;
|
||||
|
|
@ -821,8 +926,41 @@ static PyObject *
|
|||
winreg_OpenKey(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#define NUM_KEYWORDS 4
|
||||
#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(key), &_Py_ID(sub_key), &_Py_ID(reserved), &_Py_ID(access), },
|
||||
};
|
||||
# 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[] = {"key", "sub_key", "reserved", "access", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "OpenKey", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "OpenKey",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[4];
|
||||
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
|
||||
HKEY key;
|
||||
|
|
@ -911,8 +1049,41 @@ static PyObject *
|
|||
winreg_OpenKeyEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#define NUM_KEYWORDS 4
|
||||
#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(key), &_Py_ID(sub_key), &_Py_ID(reserved), &_Py_ID(access), },
|
||||
};
|
||||
# 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[] = {"key", "sub_key", "reserved", "access", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "OpenKeyEx", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "OpenKeyEx",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[4];
|
||||
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
|
||||
HKEY key;
|
||||
|
|
@ -1458,4 +1629,4 @@ winreg_QueryReflectionKey(PyObject *module, PyObject *arg)
|
|||
exit:
|
||||
return return_value;
|
||||
}
|
||||
/*[clinic end generated code: output=3faa63af6fd1653c input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=dc148c077a03843e input=a9049054013a1b77]*/
|
||||
|
|
|
|||
113
PC/clinic/winsound.c.h
generated
113
PC/clinic/winsound.c.h
generated
|
|
@ -2,6 +2,12 @@
|
|||
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
|
||||
|
||||
|
||||
PyDoc_STRVAR(winsound_PlaySound__doc__,
|
||||
"PlaySound($module, /, sound, flags)\n"
|
||||
"--\n"
|
||||
|
|
@ -23,8 +29,41 @@ static PyObject *
|
|||
winsound_PlaySound(PyObject *module, 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(sound), &_Py_ID(flags), },
|
||||
};
|
||||
# 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[] = {"sound", "flags", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "PlaySound", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "PlaySound",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[2];
|
||||
PyObject *sound;
|
||||
int flags;
|
||||
|
|
@ -66,8 +105,41 @@ static PyObject *
|
|||
winsound_Beep(PyObject *module, 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(frequency), &_Py_ID(duration), },
|
||||
};
|
||||
# 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[] = {"frequency", "duration", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "Beep", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "Beep",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[2];
|
||||
int frequency;
|
||||
int duration;
|
||||
|
|
@ -108,8 +180,41 @@ static PyObject *
|
|||
winsound_MessageBeep(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#define NUM_KEYWORDS 1
|
||||
#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(type), },
|
||||
};
|
||||
# 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[] = {"type", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "MessageBeep", 0};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "MessageBeep",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[1];
|
||||
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
|
||||
int type = MB_OK;
|
||||
|
|
@ -131,4 +236,4 @@ skip_optional_pos:
|
|||
exit:
|
||||
return return_value;
|
||||
}
|
||||
/*[clinic end generated code: output=b7e53fab4f26aeaf input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=bdca8518ca517fd8 input=a9049054013a1b77]*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue