Skip to content

Commit b294e9d

Browse files
committed
updated for version 7.3.825
Problem: With Python errors are not always clear. Solution: Print the stack trace, unless :silent is used. (ZyX)
1 parent 6595395 commit b294e9d

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

src/if_python.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ struct PyMethodDef { Py_ssize_t a; };
148148
# define PyDict_SetItemString dll_PyDict_SetItemString
149149
# define PyErr_BadArgument dll_PyErr_BadArgument
150150
# define PyErr_Clear dll_PyErr_Clear
151+
# define PyErr_PrintEx dll_PyErr_PrintEx
151152
# define PyErr_NoMemory dll_PyErr_NoMemory
152153
# define PyErr_Occurred dll_PyErr_Occurred
153154
# define PyErr_SetNone dll_PyErr_SetNone
@@ -251,6 +252,7 @@ static void* (*dll_PyMem_Malloc)(size_t);
251252
static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
252253
static int(*dll_PyErr_BadArgument)(void);
253254
static void(*dll_PyErr_Clear)(void);
255+
static void(*dll_PyErr_PrintEx)(int);
254256
static PyObject*(*dll_PyErr_NoMemory)(void);
255257
static PyObject*(*dll_PyErr_Occurred)(void);
256258
static void(*dll_PyErr_SetNone)(PyObject *);
@@ -380,6 +382,7 @@ static struct
380382
{"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
381383
{"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
382384
{"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
385+
{"PyErr_PrintEx", (PYTHON_PROC*)&dll_PyErr_PrintEx},
383386
{"PyErr_NoMemory", (PYTHON_PROC*)&dll_PyErr_NoMemory},
384387
{"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred},
385388
{"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone},
@@ -856,7 +859,11 @@ DoPythonCommand(exarg_T *eap, const char *cmd, typval_T *rettv)
856859

857860
r = PyRun_String((char *)(cmd), Py_eval_input, globals, globals);
858861
if (r == NULL)
862+
{
863+
if (PyErr_Occurred() && !msg_silent)
864+
PyErr_PrintEx(0);
859865
EMSG(_("E858: Eval did not return a valid python object"));
866+
}
860867
else
861868
{
862869
if (ConvertFromPyObject(r, rettv) == -1)

src/if_python3.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ static void init_structs(void);
122122
# define PyDict_SetItemString py3_PyDict_SetItemString
123123
# define PyErr_BadArgument py3_PyErr_BadArgument
124124
# define PyErr_Clear py3_PyErr_Clear
125+
# define PyErr_PrintEx py3_PyErr_PrintEx
125126
# define PyErr_NoMemory py3_PyErr_NoMemory
126127
# define PyErr_Occurred py3_PyErr_Occurred
127128
# define PyErr_SetNone py3_PyErr_SetNone
@@ -279,6 +280,7 @@ static int (*py3_PyMem_Free)(void *);
279280
static void* (*py3_PyMem_Malloc)(size_t);
280281
static int (*py3_Py_IsInitialized)(void);
281282
static void (*py3_PyErr_Clear)(void);
283+
static void (*py3_PyErr_PrintEx)(int);
282284
static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
283285
static iternextfunc py3__PyObject_NextNotImplemented;
284286
static PyObject* py3__Py_NoneStruct;
@@ -403,6 +405,7 @@ static struct
403405
{"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
404406
{"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct},
405407
{"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
408+
{"PyErr_PrintEx", (PYTHON_PROC*)&py3_PyErr_PrintEx},
406409
{"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
407410
{"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
408411
{"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
@@ -842,7 +845,11 @@ DoPy3Command(exarg_T *eap, const char *cmd, typval_T *rettv)
842845
r = PyRun_String(PyBytes_AsString(cmdbytes), Py_eval_input,
843846
globals, globals);
844847
if (r == NULL)
848+
{
849+
if (PyErr_Occurred() && !msg_silent)
850+
PyErr_PrintEx(0);
845851
EMSG(_("E860: Eval did not return a valid python 3 object"));
852+
}
846853
else
847854
{
848855
if (ConvertFromPyObject(r, rettv) == -1)

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,8 @@ static char *(features[]) =
725725

726726
static int included_patches[] =
727727
{ /* Add new patch number below this line */
728+
/**/
729+
825,
728730
/**/
729731
824,
730732
/**/

0 commit comments

Comments
 (0)