Branch data Line data Source code
1 : : /*[clinic input]
2 : : preserve
3 : : [clinic start generated code]*/
4 : :
5 : : #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
6 : : # include "pycore_gc.h" // PyGC_Head
7 : : # include "pycore_runtime.h" // _Py_ID()
8 : : #endif
9 : :
10 : :
11 : : PyDoc_STRVAR(tb_new__doc__,
12 : : "TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)\n"
13 : : "--\n"
14 : : "\n"
15 : : "Create a new traceback object.");
16 : :
17 : : static PyObject *
18 : : tb_new_impl(PyTypeObject *type, PyObject *tb_next, PyFrameObject *tb_frame,
19 : : int tb_lasti, int tb_lineno);
20 : :
21 : : static PyObject *
22 : 0 : tb_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
23 : : {
24 : 0 : PyObject *return_value = NULL;
25 : : #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
26 : :
27 : : #define NUM_KEYWORDS 4
28 : : static struct {
29 : : PyGC_Head _this_is_not_used;
30 : : PyObject_VAR_HEAD
31 : : PyObject *ob_item[NUM_KEYWORDS];
32 : : } _kwtuple = {
33 : : .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
34 : : .ob_item = { &_Py_ID(tb_next), &_Py_ID(tb_frame), &_Py_ID(tb_lasti), &_Py_ID(tb_lineno), },
35 : : };
36 : : #undef NUM_KEYWORDS
37 : : #define KWTUPLE (&_kwtuple.ob_base.ob_base)
38 : :
39 : : #else // !Py_BUILD_CORE
40 : : # define KWTUPLE NULL
41 : : #endif // !Py_BUILD_CORE
42 : :
43 : : static const char * const _keywords[] = {"tb_next", "tb_frame", "tb_lasti", "tb_lineno", NULL};
44 : : static _PyArg_Parser _parser = {
45 : : .keywords = _keywords,
46 : : .fname = "TracebackType",
47 : : .kwtuple = KWTUPLE,
48 : : };
49 : : #undef KWTUPLE
50 : : PyObject *argsbuf[4];
51 : : PyObject * const *fastargs;
52 : 0 : Py_ssize_t nargs = PyTuple_GET_SIZE(args);
53 : : PyObject *tb_next;
54 : : PyFrameObject *tb_frame;
55 : : int tb_lasti;
56 : : int tb_lineno;
57 : :
58 [ # # # # : 0 : fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 4, 4, 0, argsbuf);
# # # # ]
59 [ # # ]: 0 : if (!fastargs) {
60 : 0 : goto exit;
61 : : }
62 : 0 : tb_next = fastargs[0];
63 [ # # ]: 0 : if (!PyObject_TypeCheck(fastargs[1], &PyFrame_Type)) {
64 : 0 : _PyArg_BadArgument("TracebackType", "argument 'tb_frame'", (&PyFrame_Type)->tp_name, fastargs[1]);
65 : 0 : goto exit;
66 : : }
67 : 0 : tb_frame = (PyFrameObject *)fastargs[1];
68 : 0 : tb_lasti = _PyLong_AsInt(fastargs[2]);
69 [ # # # # ]: 0 : if (tb_lasti == -1 && PyErr_Occurred()) {
70 : 0 : goto exit;
71 : : }
72 : 0 : tb_lineno = _PyLong_AsInt(fastargs[3]);
73 [ # # # # ]: 0 : if (tb_lineno == -1 && PyErr_Occurred()) {
74 : 0 : goto exit;
75 : : }
76 : 0 : return_value = tb_new_impl(type, tb_next, tb_frame, tb_lasti, tb_lineno);
77 : :
78 : 0 : exit:
79 : 0 : return return_value;
80 : : }
81 : : /*[clinic end generated code: output=7bc9927e362fdfb7 input=a9049054013a1b77]*/
|