]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.825 v7.3.825
authorBram Moolenaar <Bram@vim.org>
Wed, 20 Feb 2013 15:09:43 +0000 (16:09 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 20 Feb 2013 15:09:43 +0000 (16:09 +0100)
Problem:    With Python errors are not always clear.
Solution:   Print the stack trace, unless :silent is used. (ZyX)

src/if_python.c
src/if_python3.c
src/version.c

index d0314e2f535363201932cd61683362cd6eb4bd1d..89cb0334b0c33f5d07de4b91f54551ac213b7777 100644 (file)
@@ -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)
index 5311483ddb94cf1f3c6ef981d27c6d77fdc1b4e2..d8f757475f589186ba7704cab7185a4892bab6dc 100644 (file)
@@ -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)
index fff1f7a6a4656e3436aa91096767fe0753f6fe73..c6b6c2787a5b5b7c126ba294f8d89e3a6d11b350 100644 (file)
@@ -725,6 +725,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    825,
 /**/
     824,
 /**/