diff --git a/7.3.1003 b/7.3.1003 new file mode 100644 index 0000000..cd84406 --- /dev/null +++ b/7.3.1003 @@ -0,0 +1,381 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.1003 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.1003 +Problem: Python interface does not compile with Python 2.2 +Solution: Fix thread issues and True/False. (ZyX) +Files: src/if_py_both.h, src/if_python3.c, src/if_python.c, + src/testdir/test86.in, src/testdir/test86.ok, + src/testdir/test87.in, src/testdir/test87.ok + + +*** ../vim-7.3.1002/src/if_py_both.h 2013-05-21 22:13:36.000000000 +0200 +--- src/if_py_both.h 2013-05-21 22:16:58.000000000 +0200 +*************** +*** 31,37 **** + #define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1)) + + typedef void (*rangeinitializer)(void *); +! typedef void (*runner)(const char *, void *, PyGILState_STATE *); + + static int ConvertFromPyObject(PyObject *, typval_T *); + static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *); +--- 31,41 ---- + #define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1)) + + typedef void (*rangeinitializer)(void *); +! typedef void (*runner)(const char *, void * +! #ifdef PY_CAN_RECURSE +! , PyGILState_STATE * +! #endif +! ); + + static int ConvertFromPyObject(PyObject *, typval_T *); + static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *); +*************** +*** 3489,3495 **** + } + + static void +! run_cmd(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate UNUSED) + { + PyRun_SimpleString((char *) cmd); + } +--- 3493,3503 ---- + } + + static void +! run_cmd(const char *cmd, void *arg UNUSED +! #ifdef PY_CAN_RECURSE +! , PyGILState_STATE *pygilstate UNUSED +! #endif +! ) + { + PyRun_SimpleString((char *) cmd); + } +*************** +*** 3498,3504 **** + static int code_hdr_len = 30; + + static void +! run_do(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate) + { + PyInt lnum; + size_t len; +--- 3506,3516 ---- + static int code_hdr_len = 30; + + static void +! run_do(const char *cmd, void *arg UNUSED +! #ifdef PY_CAN_RECURSE +! , PyGILState_STATE *pygilstate +! #endif +! ) + { + PyInt lnum; + size_t len; +*************** +*** 3528,3540 **** +--- 3540,3556 ---- + status = 0; + pymain = PyImport_AddModule("__main__"); + pyfunc = PyObject_GetAttrString(pymain, DOPY_FUNC); ++ #ifdef PY_CAN_RECURSE + PyGILState_Release(*pygilstate); ++ #endif + + for (lnum = RangeStart; lnum <= RangeEnd; ++lnum) + { + PyObject *line, *linenr, *ret; + ++ #ifdef PY_CAN_RECURSE + *pygilstate = PyGILState_Ensure(); ++ #endif + if (!(line = GetBufferLine(curbuf, lnum))) + goto err; + if (!(linenr = PyInt_FromLong((long) lnum))) +*************** +*** 3554,3570 **** +--- 3570,3592 ---- + + Py_XDECREF(ret); + PythonIO_Flush(); ++ #ifdef PY_CAN_RECURSE + PyGILState_Release(*pygilstate); ++ #endif + } + goto out; + err: ++ #ifdef PY_CAN_RECURSE + *pygilstate = PyGILState_Ensure(); ++ #endif + PyErr_PrintEx(0); + PythonIO_Flush(); + status = 1; + out: ++ #ifdef PY_CAN_RECURSE + if (!status) + *pygilstate = PyGILState_Ensure(); ++ #endif + Py_DECREF(pyfunc); + PyObject_SetAttrString(pymain, DOPY_FUNC, NULL); + if (status) +*************** +*** 3574,3580 **** + } + + static void +! run_eval(const char *cmd, typval_T *rettv, PyGILState_STATE *pygilstate UNUSED) + { + PyObject *r; + +--- 3596,3606 ---- + } + + static void +! run_eval(const char *cmd, typval_T *rettv +! #ifdef PY_CAN_RECURSE +! , PyGILState_STATE *pygilstate UNUSED +! #endif +! ) + { + PyObject *r; + +*** ../vim-7.3.1002/src/if_python3.c 2013-05-21 20:51:55.000000000 +0200 +--- src/if_python3.c 2013-05-21 22:16:58.000000000 +0200 +*************** +*** 693,698 **** +--- 693,700 ---- + + static struct PyModuleDef vimmodule; + ++ #define PY_CAN_RECURSE ++ + /* + * Include the code shared with if_python.c + */ +*** ../vim-7.3.1002/src/if_python.c 2013-05-21 20:51:55.000000000 +0200 +--- src/if_python.c 2013-05-21 22:16:58.000000000 +0200 +*************** +*** 641,647 **** + #define DICTKEY_UNREF + #define DICTKEY_DECL + +! #define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self); + + #define WIN_PYTHON_REF(win) win->w_python_ref + #define BUF_PYTHON_REF(buf) buf->b_python_ref +--- 641,647 ---- + #define DICTKEY_UNREF + #define DICTKEY_DECL + +! #define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self); + + #define WIN_PYTHON_REF(win) win->w_python_ref + #define BUF_PYTHON_REF(buf) buf->b_python_ref +*************** +*** 656,661 **** +--- 656,670 ---- + static PyObject *ListGetattr(PyObject *, char *); + static PyObject *FunctionGetattr(PyObject *, char *); + ++ #ifndef Py_VISIT ++ # define Py_VISIT(obj) visit(obj, arg) ++ #endif ++ #ifndef Py_CLEAR ++ # define Py_CLEAR(obj) \ ++ Py_XDECREF(obj); \ ++ obj = NULL; ++ #endif ++ + /* + * Include the code shared with if_python3.c + */ +*************** +*** 881,887 **** + Python_RestoreThread(); /* enter python */ + #endif + +! run((char *) cmd, arg, &pygilstate); + + #ifdef PY_CAN_RECURSE + PyGILState_Release(pygilstate); +--- 890,900 ---- + Python_RestoreThread(); /* enter python */ + #endif + +! run((char *) cmd, arg +! #ifdef PY_CAN_RECURSE +! , &pygilstate +! #endif +! ); + + #ifdef PY_CAN_RECURSE + PyGILState_Release(pygilstate); +*** ../vim-7.3.1002/src/testdir/test86.in 2013-05-21 20:40:35.000000000 +0200 +--- src/testdir/test86.in 2013-05-21 22:16:58.000000000 +0200 +*************** +*** 518,523 **** +--- 518,527 ---- + :edit c + :buffer # + py << EOF ++ try: ++ from __builtin__ import next ++ except ImportError: ++ next = lambda o: o.next() + # Check GCing iterator that was not fully exhausted + i = iter(vim.buffers) + cb.append('i:' + str(next(i))) +*************** +*** 577,591 **** + cb.append('Number of tabs: ' + str(len(vim.tabpages))) + cb.append('Current tab pages:') + def W(w): +! if '(unknown)' in repr(w): + return '' + else: + return repr(w) + for t in vim.tabpages: + cb.append(' ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window)) + cb.append(' Windows:') + for w in t.windows: +! cb.append(' ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + repr(w.cursor)) + # Other values depend on the size of the terminal, so they are checked partly: + for attr in ('height', 'row', 'width', 'col'): + try: +--- 581,602 ---- + cb.append('Number of tabs: ' + str(len(vim.tabpages))) + cb.append('Current tab pages:') + def W(w): +! if repr(w).find('(unknown)') != -1: + return '' + else: + return repr(w) ++ ++ def Cursor(w, start=len(cb)): ++ if w.buffer is cb: ++ return repr((start - w.cursor[0], w.cursor[1])) ++ else: ++ return repr(w.cursor) ++ + for t in vim.tabpages: + cb.append(' ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window)) + cb.append(' Windows:') + for w in t.windows: +! cb.append(' ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w)) + # Other values depend on the size of the terminal, so they are checked partly: + for attr in ('height', 'row', 'width', 'col'): + try: +*** ../vim-7.3.1002/src/testdir/test86.ok 2013-05-21 20:40:35.000000000 +0200 +--- src/testdir/test86.ok 2013-05-21 22:18:02.000000000 +0200 +*************** +*** 333,339 **** + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (990, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +--- 333,339 ---- + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (27, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +*** ../vim-7.3.1002/src/testdir/test87.in 2013-05-21 20:40:35.000000000 +0200 +--- src/testdir/test87.in 2013-05-21 22:16:58.000000000 +0200 +*************** +*** 561,578 **** + :vnew b.2 + :vnew c.2 + py3 << EOF + def W(w): + if '(unknown)' in repr(w): + return '' + else: + return repr(w) +! cb.append('Number of tabs: ' + str(len(vim.tabpages))) +! cb.append('Current tab pages:') + for t in vim.tabpages: + cb.append(' ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window)) + cb.append(' Windows:') + for w in t.windows: +! cb.append(' ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + repr(w.cursor)) + # Other values depend on the size of the terminal, so they are checked partly: + for attr in ('height', 'row', 'width', 'col'): + try: +--- 561,586 ---- + :vnew b.2 + :vnew c.2 + py3 << EOF ++ cb.append('Number of tabs: ' + str(len(vim.tabpages))) ++ cb.append('Current tab pages:') ++ + def W(w): + if '(unknown)' in repr(w): + return '' + else: + return repr(w) +! +! def Cursor(w, start=len(cb)): +! if w.buffer is cb: +! return repr((start - w.cursor[0], w.cursor[1])) +! else: +! return repr(w.cursor) +! + for t in vim.tabpages: + cb.append(' ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window)) + cb.append(' Windows:') + for w in t.windows: +! cb.append(' ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w)) + # Other values depend on the size of the terminal, so they are checked partly: + for attr in ('height', 'row', 'width', 'col'): + try: +*** ../vim-7.3.1002/src/testdir/test87.ok 2013-05-21 20:40:35.000000000 +0200 +--- src/testdir/test87.ok 2013-05-21 22:18:31.000000000 +0200 +*************** +*** 322,328 **** + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (966, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +--- 322,328 ---- + Current tab pages: + (1): 1 windows, current is + Windows: +! (1): displays buffer ; cursor is at (27, 0) + (2): 1 windows, current is + Windows: + (1): displays buffer ; cursor is at (1, 0) +*** ../vim-7.3.1002/src/version.c 2013-05-21 22:13:36.000000000 +0200 +--- src/version.c 2013-05-21 22:19:01.000000000 +0200 +*************** +*** 730,731 **** +--- 730,733 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1003, + /**/ + +-- +./configure +Checking whether build environment is sane ... +build environment is grinning and holding a spatula. Guess not. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///