| /*[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 |
| #include "pycore_modsupport.h" // _PyArg_CheckPositional() |
| |
| PyDoc_STRVAR(_testcapi_err_set_raised__doc__, |
| "err_set_raised($module, exception, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_ERR_SET_RAISED_METHODDEF \ |
| {"err_set_raised", (PyCFunction)_testcapi_err_set_raised, METH_O, _testcapi_err_set_raised__doc__}, |
| |
| PyDoc_STRVAR(_testcapi_exception_print__doc__, |
| "exception_print($module, exception, legacy=False, /)\n" |
| "--\n" |
| "\n" |
| "To test the format of exceptions as printed out."); |
| |
| #define _TESTCAPI_EXCEPTION_PRINT_METHODDEF \ |
| {"exception_print", _PyCFunction_CAST(_testcapi_exception_print), METH_FASTCALL, _testcapi_exception_print__doc__}, |
| |
| static PyObject * |
| _testcapi_exception_print_impl(PyObject *module, PyObject *exc, int legacy); |
| |
| static PyObject * |
| _testcapi_exception_print(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *exc; |
| int legacy = 0; |
| |
| if (!_PyArg_CheckPositional("exception_print", nargs, 1, 2)) { |
| goto exit; |
| } |
| exc = args[0]; |
| if (nargs < 2) { |
| goto skip_optional; |
| } |
| legacy = PyObject_IsTrue(args[1]); |
| if (legacy < 0) { |
| goto exit; |
| } |
| skip_optional: |
| return_value = _testcapi_exception_print_impl(module, exc, legacy); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_make_exception_with_doc__doc__, |
| "make_exception_with_doc($module, /, name, doc=<unrepresentable>,\n" |
| " base=<unrepresentable>, dict=<unrepresentable>)\n" |
| "--\n" |
| "\n" |
| "Test PyErr_NewExceptionWithDoc (also exercise PyErr_NewException). Run via Lib/test/test_exceptions.py"); |
| |
| #define _TESTCAPI_MAKE_EXCEPTION_WITH_DOC_METHODDEF \ |
| {"make_exception_with_doc", _PyCFunction_CAST(_testcapi_make_exception_with_doc), METH_FASTCALL|METH_KEYWORDS, _testcapi_make_exception_with_doc__doc__}, |
| |
| static PyObject * |
| _testcapi_make_exception_with_doc_impl(PyObject *module, const char *name, |
| const char *doc, PyObject *base, |
| PyObject *dict); |
| |
| static PyObject * |
| _testcapi_make_exception_with_doc(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 4 |
| 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(name), &_Py_ID(doc), &_Py_ID(base), &_Py_ID(dict), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"name", "doc", "base", "dict", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "make_exception_with_doc", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[4]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; |
| const char *name; |
| const char *doc = NULL; |
| PyObject *base = NULL; |
| PyObject *dict = NULL; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 4, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!PyUnicode_Check(args[0])) { |
| _PyArg_BadArgument("make_exception_with_doc", "argument 'name'", "str", args[0]); |
| goto exit; |
| } |
| Py_ssize_t name_length; |
| name = PyUnicode_AsUTF8AndSize(args[0], &name_length); |
| if (name == NULL) { |
| goto exit; |
| } |
| if (strlen(name) != (size_t)name_length) { |
| PyErr_SetString(PyExc_ValueError, "embedded null character"); |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_pos; |
| } |
| if (args[1]) { |
| if (!PyUnicode_Check(args[1])) { |
| _PyArg_BadArgument("make_exception_with_doc", "argument 'doc'", "str", args[1]); |
| goto exit; |
| } |
| Py_ssize_t doc_length; |
| doc = PyUnicode_AsUTF8AndSize(args[1], &doc_length); |
| if (doc == NULL) { |
| goto exit; |
| } |
| if (strlen(doc) != (size_t)doc_length) { |
| PyErr_SetString(PyExc_ValueError, "embedded null character"); |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_pos; |
| } |
| } |
| if (args[2]) { |
| base = args[2]; |
| if (!--noptargs) { |
| goto skip_optional_pos; |
| } |
| } |
| dict = args[3]; |
| skip_optional_pos: |
| return_value = _testcapi_make_exception_with_doc_impl(module, name, doc, base, dict); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_exc_set_object__doc__, |
| "exc_set_object($module, exception, obj, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_EXC_SET_OBJECT_METHODDEF \ |
| {"exc_set_object", _PyCFunction_CAST(_testcapi_exc_set_object), METH_FASTCALL, _testcapi_exc_set_object__doc__}, |
| |
| static PyObject * |
| _testcapi_exc_set_object_impl(PyObject *module, PyObject *exc, PyObject *obj); |
| |
| static PyObject * |
| _testcapi_exc_set_object(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *exc; |
| PyObject *obj; |
| |
| if (!_PyArg_CheckPositional("exc_set_object", nargs, 2, 2)) { |
| goto exit; |
| } |
| exc = args[0]; |
| obj = args[1]; |
| return_value = _testcapi_exc_set_object_impl(module, exc, obj); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_exc_set_object_fetch__doc__, |
| "exc_set_object_fetch($module, exception, obj, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_EXC_SET_OBJECT_FETCH_METHODDEF \ |
| {"exc_set_object_fetch", _PyCFunction_CAST(_testcapi_exc_set_object_fetch), METH_FASTCALL, _testcapi_exc_set_object_fetch__doc__}, |
| |
| static PyObject * |
| _testcapi_exc_set_object_fetch_impl(PyObject *module, PyObject *exc, |
| PyObject *obj); |
| |
| static PyObject * |
| _testcapi_exc_set_object_fetch(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *exc; |
| PyObject *obj; |
| |
| if (!_PyArg_CheckPositional("exc_set_object_fetch", nargs, 2, 2)) { |
| goto exit; |
| } |
| exc = args[0]; |
| obj = args[1]; |
| return_value = _testcapi_exc_set_object_fetch_impl(module, exc, obj); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_err_setstring__doc__, |
| "err_setstring($module, exc, value, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_ERR_SETSTRING_METHODDEF \ |
| {"err_setstring", _PyCFunction_CAST(_testcapi_err_setstring), METH_FASTCALL, _testcapi_err_setstring__doc__}, |
| |
| static PyObject * |
| _testcapi_err_setstring_impl(PyObject *module, PyObject *exc, |
| const char *value, Py_ssize_t value_length); |
| |
| static PyObject * |
| _testcapi_err_setstring(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *exc; |
| const char *value; |
| Py_ssize_t value_length; |
| |
| if (!_PyArg_ParseStack(args, nargs, "Oz#:err_setstring", |
| &exc, &value, &value_length)) { |
| goto exit; |
| } |
| return_value = _testcapi_err_setstring_impl(module, exc, value, value_length); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_err_setfromerrnowithfilename__doc__, |
| "err_setfromerrnowithfilename($module, error, exc, value, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_ERR_SETFROMERRNOWITHFILENAME_METHODDEF \ |
| {"err_setfromerrnowithfilename", _PyCFunction_CAST(_testcapi_err_setfromerrnowithfilename), METH_FASTCALL, _testcapi_err_setfromerrnowithfilename__doc__}, |
| |
| static PyObject * |
| _testcapi_err_setfromerrnowithfilename_impl(PyObject *module, int error, |
| PyObject *exc, const char *value, |
| Py_ssize_t value_length); |
| |
| static PyObject * |
| _testcapi_err_setfromerrnowithfilename(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| int error; |
| PyObject *exc; |
| const char *value; |
| Py_ssize_t value_length; |
| |
| if (!_PyArg_ParseStack(args, nargs, "iOz#:err_setfromerrnowithfilename", |
| &error, &exc, &value, &value_length)) { |
| goto exit; |
| } |
| return_value = _testcapi_err_setfromerrnowithfilename_impl(module, error, exc, value, value_length); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_raise_exception__doc__, |
| "raise_exception($module, exception, num_args, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_RAISE_EXCEPTION_METHODDEF \ |
| {"raise_exception", _PyCFunction_CAST(_testcapi_raise_exception), METH_FASTCALL, _testcapi_raise_exception__doc__}, |
| |
| static PyObject * |
| _testcapi_raise_exception_impl(PyObject *module, PyObject *exc, int num_args); |
| |
| static PyObject * |
| _testcapi_raise_exception(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *exc; |
| int num_args; |
| |
| if (!_PyArg_CheckPositional("raise_exception", nargs, 2, 2)) { |
| goto exit; |
| } |
| exc = args[0]; |
| num_args = PyLong_AsInt(args[1]); |
| if (num_args == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = _testcapi_raise_exception_impl(module, exc, num_args); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_raise_memoryerror__doc__, |
| "raise_memoryerror($module, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_RAISE_MEMORYERROR_METHODDEF \ |
| {"raise_memoryerror", (PyCFunction)_testcapi_raise_memoryerror, METH_NOARGS, _testcapi_raise_memoryerror__doc__}, |
| |
| static PyObject * |
| _testcapi_raise_memoryerror_impl(PyObject *module); |
| |
| static PyObject * |
| _testcapi_raise_memoryerror(PyObject *module, PyObject *Py_UNUSED(ignored)) |
| { |
| return _testcapi_raise_memoryerror_impl(module); |
| } |
| |
| PyDoc_STRVAR(_testcapi_fatal_error__doc__, |
| "fatal_error($module, message, release_gil=False, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_FATAL_ERROR_METHODDEF \ |
| {"fatal_error", _PyCFunction_CAST(_testcapi_fatal_error), METH_FASTCALL, _testcapi_fatal_error__doc__}, |
| |
| static PyObject * |
| _testcapi_fatal_error_impl(PyObject *module, const char *message, |
| int release_gil); |
| |
| static PyObject * |
| _testcapi_fatal_error(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| const char *message; |
| int release_gil = 0; |
| |
| if (!_PyArg_ParseStack(args, nargs, "y|p:fatal_error", |
| &message, &release_gil)) { |
| goto exit; |
| } |
| return_value = _testcapi_fatal_error_impl(module, message, release_gil); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_set_exc_info__doc__, |
| "set_exc_info($module, new_type, new_value, new_tb, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_SET_EXC_INFO_METHODDEF \ |
| {"set_exc_info", _PyCFunction_CAST(_testcapi_set_exc_info), METH_FASTCALL, _testcapi_set_exc_info__doc__}, |
| |
| static PyObject * |
| _testcapi_set_exc_info_impl(PyObject *module, PyObject *new_type, |
| PyObject *new_value, PyObject *new_tb); |
| |
| static PyObject * |
| _testcapi_set_exc_info(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *new_type; |
| PyObject *new_value; |
| PyObject *new_tb; |
| |
| if (!_PyArg_CheckPositional("set_exc_info", nargs, 3, 3)) { |
| goto exit; |
| } |
| new_type = args[0]; |
| new_value = args[1]; |
| new_tb = args[2]; |
| return_value = _testcapi_set_exc_info_impl(module, new_type, new_value, new_tb); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_set_exception__doc__, |
| "set_exception($module, new_exc, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define _TESTCAPI_SET_EXCEPTION_METHODDEF \ |
| {"set_exception", (PyCFunction)_testcapi_set_exception, METH_O, _testcapi_set_exception__doc__}, |
| |
| PyDoc_STRVAR(_testcapi_traceback_print__doc__, |
| "traceback_print($module, traceback, file, /)\n" |
| "--\n" |
| "\n" |
| "To test the format of tracebacks as printed out."); |
| |
| #define _TESTCAPI_TRACEBACK_PRINT_METHODDEF \ |
| {"traceback_print", _PyCFunction_CAST(_testcapi_traceback_print), METH_FASTCALL, _testcapi_traceback_print__doc__}, |
| |
| static PyObject * |
| _testcapi_traceback_print_impl(PyObject *module, PyObject *traceback, |
| PyObject *file); |
| |
| static PyObject * |
| _testcapi_traceback_print(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *traceback; |
| PyObject *file; |
| |
| if (!_PyArg_CheckPositional("traceback_print", nargs, 2, 2)) { |
| goto exit; |
| } |
| traceback = args[0]; |
| file = args[1]; |
| return_value = _testcapi_traceback_print_impl(module, traceback, file); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(_testcapi_unstable_exc_prep_reraise_star__doc__, |
| "unstable_exc_prep_reraise_star($module, orig, excs, /)\n" |
| "--\n" |
| "\n" |
| "To test PyUnstable_Exc_PrepReraiseStar."); |
| |
| #define _TESTCAPI_UNSTABLE_EXC_PREP_RERAISE_STAR_METHODDEF \ |
| {"unstable_exc_prep_reraise_star", _PyCFunction_CAST(_testcapi_unstable_exc_prep_reraise_star), METH_FASTCALL, _testcapi_unstable_exc_prep_reraise_star__doc__}, |
| |
| static PyObject * |
| _testcapi_unstable_exc_prep_reraise_star_impl(PyObject *module, |
| PyObject *orig, PyObject *excs); |
| |
| static PyObject * |
| _testcapi_unstable_exc_prep_reraise_star(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *orig; |
| PyObject *excs; |
| |
| if (!_PyArg_CheckPositional("unstable_exc_prep_reraise_star", nargs, 2, 2)) { |
| goto exit; |
| } |
| orig = args[0]; |
| excs = args[1]; |
| return_value = _testcapi_unstable_exc_prep_reraise_star_impl(module, orig, excs); |
| |
| exit: |
| return return_value; |
| } |
| /*[clinic end generated code: output=0b11ef105030a48e input=a9049054013a1b77]*/ |