/** * jinja2._debugsupport * ~~~~~~~~~~~~~~~~~~~~ * * C implementation of `tb_set_next`. * * :copyright: (c) 2010 by the Jinja Team. * :license: BSD. */ #include static PyObject* tb_set_next(PyObject *self, PyObject *args) { PyTracebackObject *tb, *old; PyObject *next; if (!PyArg_ParseTuple(args, "O!O:tb_set_next", &PyTraceBack_Type, &tb, &next)) return NULL; if (next == Py_None) next = NULL; else if (!PyTraceBack_Check(next)) { PyErr_SetString(PyExc_TypeError, "tb_set_next arg 2 must be traceback or None"); return NULL; } else Py_INCREF(next); old = tb->tb_next; tb->tb_next = (PyTracebackObject*)next; Py_XDECREF(old); Py_INCREF(Py_None); return Py_None; } static PyMethodDef module_methods[] = { {"tb_set_next", (PyCFunction)tb_set_next, METH_VARARGS, "Set the tb_next member of a traceback object."}, {NULL, NULL, 0, NULL} /* Sentinel */ }; #if PY_MAJOR_VERSION < 3 #ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ #define PyMODINIT_FUNC void #endif PyMODINIT_FUNC init_debugsupport(void) { Py_InitModule3("jinja2._debugsupport", module_methods, ""); } #else /* Python 3.x module initialization */ static struct PyModuleDef module_definition = { PyModuleDef_HEAD_INIT, "jinja2._debugsupport", NULL, -1, module_methods, NULL, NULL, NULL, NULL }; PyMODINIT_FUNC PyInit__debugsupport(void) { return PyModule_Create(&module_definition); } #endif