| /*[clinic input] |
| preserve |
| [clinic start generated code]*/ |
| |
| #include "pycore_modsupport.h" // _PyArg_CheckPositional() |
| |
| PyDoc_STRVAR(atexit_register__doc__, |
| "register($module, func, /, *args, **kwargs)\n" |
| "--\n" |
| "\n" |
| "Register a function to be executed upon normal program termination\n" |
| "\n" |
| " func - function to be called at exit\n" |
| " args - optional arguments to pass to func\n" |
| " kwargs - optional keyword arguments to pass to func\n" |
| "\n" |
| " func is returned to facilitate usage as a decorator."); |
| |
| #define ATEXIT_REGISTER_METHODDEF \ |
| {"register", _PyCFunction_CAST(atexit_register), METH_VARARGS|METH_KEYWORDS, atexit_register__doc__}, |
| |
| static PyObject * |
| atexit_register_impl(PyObject *module, PyObject *func, PyObject *args, |
| PyObject *kwargs); |
| |
| static PyObject * |
| atexit_register(PyObject *module, PyObject *args, PyObject *kwargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *func; |
| PyObject *__clinic_args = NULL; |
| PyObject *__clinic_kwargs = NULL; |
| |
| if (!_PyArg_CheckPositional("register", PyTuple_GET_SIZE(args), 1, PY_SSIZE_T_MAX)) { |
| goto exit; |
| } |
| func = PyTuple_GET_ITEM(args, 0); |
| __clinic_args = PyTuple_GetSlice(args, 1, PY_SSIZE_T_MAX); |
| if (!__clinic_args) { |
| goto exit; |
| } |
| if (kwargs == NULL) { |
| __clinic_kwargs = PyDict_New(); |
| if (__clinic_kwargs == NULL) { |
| goto exit; |
| } |
| } |
| else { |
| __clinic_kwargs = Py_NewRef(kwargs); |
| } |
| return_value = atexit_register_impl(module, func, __clinic_args, __clinic_kwargs); |
| |
| exit: |
| /* Cleanup for args */ |
| Py_XDECREF(__clinic_args); |
| /* Cleanup for kwargs */ |
| Py_XDECREF(__clinic_kwargs); |
| |
| return return_value; |
| } |
| /*[clinic end generated code: output=8fd8f691fdbc4e0a input=a9049054013a1b77]*/ |