diff --git a/Include/pyerrors.h b/Include/pyerrors.h index f461068ab28..6e6035334d4 100644 --- a/Include/pyerrors.h +++ b/Include/pyerrors.h @@ -82,7 +82,12 @@ extern DL_IMPORT(PyObject *) PyErr_SetFromWindowsErrWithFilename(int, const char extern DL_IMPORT(PyObject *) PyErr_SetFromWindowsErr(int); #endif +/* Export the old function so that the existing API remains available: */ extern DL_IMPORT(void) PyErr_BadInternalCall(void); +extern DL_IMPORT(void) _PyErr_BadInternalCall(char *filename, int lineno); +/* Mask the old API with a call to the new API for code compiled under + Python 2.0: */ +#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) /* Function to create a new exception */ DL_IMPORT(PyObject *) PyErr_NewException(char *name, PyObject *base, diff --git a/Python/errors.c b/Python/errors.c index ffa7f82f345..8486423479e 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -368,12 +368,25 @@ PyObject *PyErr_SetFromWindowsErr(int ierr) } #endif /* MS_WINDOWS */ +void +_PyErr_BadInternalCall(char *filename, int lineno) +{ + PyErr_Format(PyExc_SystemError, + "%s:%d: bad argument to internal function", + filename, lineno); +} + +/* Remove the preprocessor macro for PyErr_BadInternalCall() so that we can + export the entry point for existing object code: */ +#undef PyErr_BadInternalCall void PyErr_BadInternalCall(void) { - PyErr_SetString(PyExc_SystemError, - "bad argument to internal function"); + PyErr_Format(PyExc_SystemError, + "bad argument to internal function"); } +#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) + PyObject *