diff src/if_py_both.h @ 5517:064e2a080e2e v7.4.107

updated for version 7.4.107 Problem: Python: When vim.eval() encounters a Vim error, a try/catch in the Python code doesn't catch it. (Yggdroot Chen) Solution: Throw exceptions on errors in vim.eval(). (ZyX)
author Bram Moolenaar <bram@vim.org>
date Thu, 28 Nov 2013 17:04:43 +0100
parents a56f60cf6834
children 3fbda56bb200
line wrap: on
line diff
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -566,6 +566,28 @@ VimTryEnd(void)
 	PyErr_SetNone(PyExc_KeyboardInterrupt);
 	return -1;
     }
+    else if (msg_list != NULL && *msg_list != NULL)
+    {
+	int	should_free;
+	char_u	*msg;
+
+	msg = get_exception_string(*msg_list, ET_ERROR, NULL, &should_free);
+
+	if (msg == NULL)
+	{
+	    PyErr_NoMemory();
+	    return -1;
+	}
+
+	PyErr_SetVim((char *) msg);
+
+	free_global_msglist();
+
+	if (should_free)
+	    vim_free(msg);
+
+	return -1;
+    }
     else if (!did_throw)
 	return (PyErr_Occurred() ? -1 : 0);
     /* Python exception is preferred over vim one; unlikely to occur though */