# HG changeset patch # User Bram Moolenaar # Date 1368624909 -7200 # Node ID d4816e7c33289b9c8aec739850133484c5c3e8fa # Parent eceacb72f33ec4ef003b206a1bd5bf3d185377d6 updated for version 7.3.950 Problem: Python: Stack trace printer can't handle messages. Solution: Make KeyErrors use PyErr_SetObject. (ZyX) diff --git a/src/if_py_both.h b/src/if_py_both.h --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -734,7 +734,7 @@ DictionaryItem(PyObject *self, PyObject if (di == NULL) { - PyErr_SetString(PyExc_KeyError, _("no such key in dictionary")); + PyErr_SetObject(PyExc_KeyError, keyObject); return NULL; } @@ -767,7 +767,7 @@ DictionaryAssItem(PyObject *self, PyObje if (di == NULL) { DICTKEY_UNREF - PyErr_SetString(PyExc_IndexError, _("no such key in dictionary")); + PyErr_SetObject(PyExc_KeyError, keyObject); return -1; } hi = hash_find(&d->dv_hashtab, di->di_key); @@ -1353,7 +1353,7 @@ OptionsItem(OptionsObject *this, PyObjec if (flags == 0) { - PyErr_SetString(PyExc_KeyError, "Option does not exist in given scope"); + PyErr_SetObject(PyExc_KeyError, keyObject); return NULL; } @@ -1447,7 +1447,7 @@ OptionsAssItem(OptionsObject *this, PyOb if (flags == 0) { - PyErr_SetString(PyExc_KeyError, "Option does not exist in given scope"); + PyErr_SetObject(PyExc_KeyError, keyObject); return -1; } @@ -3145,7 +3145,7 @@ BufMapItem(PyObject *self UNUSED, PyObje return BufferNew(b); else { - PyErr_SetString(PyExc_KeyError, _("no such buffer")); + PyErr_SetObject(PyExc_KeyError, keyObject); return NULL; } } diff --git a/src/if_python.c b/src/if_python.c --- a/src/if_python.c +++ b/src/if_python.c @@ -155,6 +155,7 @@ struct PyMethodDef { Py_ssize_t a; }; # define PyErr_Occurred dll_PyErr_Occurred # define PyErr_SetNone dll_PyErr_SetNone # define PyErr_SetString dll_PyErr_SetString +# define PyErr_SetObject dll_PyErr_SetObject # define PyEval_InitThreads dll_PyEval_InitThreads # define PyEval_RestoreThread dll_PyEval_RestoreThread # define PyEval_SaveThread dll_PyEval_SaveThread @@ -260,6 +261,7 @@ static PyObject*(*dll_PyErr_NoMemory)(vo static PyObject*(*dll_PyErr_Occurred)(void); static void(*dll_PyErr_SetNone)(PyObject *); static void(*dll_PyErr_SetString)(PyObject *, const char *); +static void(*dll_PyErr_SetObject)(PyObject *, PyObject *); static void(*dll_PyEval_InitThreads)(void); static void(*dll_PyEval_RestoreThread)(PyThreadState *); static PyThreadState*(*dll_PyEval_SaveThread)(void); @@ -393,6 +395,7 @@ static struct {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred}, {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone}, {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString}, + {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject}, {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads}, {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread}, {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread}, diff --git a/src/if_python3.c b/src/if_python3.c --- a/src/if_python3.c +++ b/src/if_python3.c @@ -128,6 +128,7 @@ static void init_structs(void); # define PyErr_Occurred py3_PyErr_Occurred # define PyErr_SetNone py3_PyErr_SetNone # define PyErr_SetString py3_PyErr_SetString +# define PyErr_SetObject py3_PyErr_SetObject # define PyEval_InitThreads py3_PyEval_InitThreads # define PyEval_RestoreThread py3_PyEval_RestoreThread # define PyEval_SaveThread py3_PyEval_SaveThread @@ -250,6 +251,7 @@ static int (*py3_PySlice_GetIndicesEx)(P static PyObject* (*py3_PyErr_NoMemory)(void); static void (*py3_Py_Finalize)(void); static void (*py3_PyErr_SetString)(PyObject *, const char *); +static void (*py3_PyErr_SetObject)(PyObject *, PyObject *); static int (*py3_PyRun_SimpleString)(char *); static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *); static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t); @@ -379,6 +381,7 @@ static struct {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory}, {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize}, {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString}, + {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject}, {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString}, {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String}, {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem}, diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 950, +/**/ 949, /**/ 948,