From 9fee7d4729af19e7ce4950ede8de358c5eeb3772 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 28 Nov 2013 17:04:43 +0100 Subject: 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) --- src/if_py_both.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/if_py_both.h') diff --git a/src/if_py_both.h b/src/if_py_both.h index e6db4a3d0..a8188c16f 100644 --- 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 */ -- cgit v1.2.1