diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-02-20 16:09:43 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-02-20 16:09:43 +0100 |
commit | 4d36987c254b820ebfaf98957c0ae5182db0508e (patch) | |
tree | fd782ba208cffa25589f4614a0252445517096f9 | |
parent | 2142e5d85112f37e68374c81612d6277c6aaaf0b (diff) | |
download | vim-git-4d36987c254b820ebfaf98957c0ae5182db0508e.tar.gz |
updated for version 7.3.825v7.3.825
Problem: With Python errors are not always clear.
Solution: Print the stack trace, unless :silent is used. (ZyX)
-rw-r--r-- | src/if_python.c | 7 | ||||
-rw-r--r-- | src/if_python3.c | 7 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/if_python.c b/src/if_python.c index d0314e2f5..89cb0334b 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -148,6 +148,7 @@ struct PyMethodDef { Py_ssize_t a; }; # define PyDict_SetItemString dll_PyDict_SetItemString # define PyErr_BadArgument dll_PyErr_BadArgument # define PyErr_Clear dll_PyErr_Clear +# define PyErr_PrintEx dll_PyErr_PrintEx # define PyErr_NoMemory dll_PyErr_NoMemory # define PyErr_Occurred dll_PyErr_Occurred # define PyErr_SetNone dll_PyErr_SetNone @@ -251,6 +252,7 @@ static void* (*dll_PyMem_Malloc)(size_t); static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); static int(*dll_PyErr_BadArgument)(void); static void(*dll_PyErr_Clear)(void); +static void(*dll_PyErr_PrintEx)(int); static PyObject*(*dll_PyErr_NoMemory)(void); static PyObject*(*dll_PyErr_Occurred)(void); static void(*dll_PyErr_SetNone)(PyObject *); @@ -380,6 +382,7 @@ static struct {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString}, {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument}, {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear}, + {"PyErr_PrintEx", (PYTHON_PROC*)&dll_PyErr_PrintEx}, {"PyErr_NoMemory", (PYTHON_PROC*)&dll_PyErr_NoMemory}, {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred}, {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone}, @@ -856,7 +859,11 @@ DoPythonCommand(exarg_T *eap, const char *cmd, typval_T *rettv) r = PyRun_String((char *)(cmd), Py_eval_input, globals, globals); if (r == NULL) + { + if (PyErr_Occurred() && !msg_silent) + PyErr_PrintEx(0); EMSG(_("E858: Eval did not return a valid python object")); + } else { if (ConvertFromPyObject(r, rettv) == -1) diff --git a/src/if_python3.c b/src/if_python3.c index 5311483dd..d8f757475 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -122,6 +122,7 @@ static void init_structs(void); # define PyDict_SetItemString py3_PyDict_SetItemString # define PyErr_BadArgument py3_PyErr_BadArgument # define PyErr_Clear py3_PyErr_Clear +# define PyErr_PrintEx py3_PyErr_PrintEx # define PyErr_NoMemory py3_PyErr_NoMemory # define PyErr_Occurred py3_PyErr_Occurred # define PyErr_SetNone py3_PyErr_SetNone @@ -279,6 +280,7 @@ static int (*py3_PyMem_Free)(void *); static void* (*py3_PyMem_Malloc)(size_t); static int (*py3_Py_IsInitialized)(void); static void (*py3_PyErr_Clear)(void); +static void (*py3_PyErr_PrintEx)(int); static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *); static iternextfunc py3__PyObject_NextNotImplemented; static PyObject* py3__Py_NoneStruct; @@ -403,6 +405,7 @@ static struct {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct}, {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct}, {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear}, + {"PyErr_PrintEx", (PYTHON_PROC*)&py3_PyErr_PrintEx}, {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init}, {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject}, {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab}, @@ -842,7 +845,11 @@ DoPy3Command(exarg_T *eap, const char *cmd, typval_T *rettv) r = PyRun_String(PyBytes_AsString(cmdbytes), Py_eval_input, globals, globals); if (r == NULL) + { + if (PyErr_Occurred() && !msg_silent) + PyErr_PrintEx(0); EMSG(_("E860: Eval did not return a valid python 3 object")); + } else { if (ConvertFromPyObject(r, rettv) == -1) diff --git a/src/version.c b/src/version.c index fff1f7a6a..c6b6c2787 100644 --- a/src/version.c +++ b/src/version.c @@ -726,6 +726,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 825, +/**/ 824, /**/ 823, |