]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.1003 v7.3.1003
authorBram Moolenaar <Bram@vim.org>
Tue, 21 May 2013 20:23:56 +0000 (22:23 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 21 May 2013 20:23:56 +0000 (22:23 +0200)
Problem:    Python interface does not compile with Python 2.2
Solution:   Fix thread issues and True/False. (ZyX)

src/if_py_both.h
src/if_python.c
src/if_python3.c
src/testdir/test86.in
src/testdir/test86.ok
src/testdir/test87.in
src/testdir/test87.ok
src/version.c

index 384aea9360cdaef7cdb59d1c20f17cfe456e19c6..b658ce36780dff3aa838f5472aab96bba00d0a4d 100644 (file)
@@ -31,7 +31,11 @@ typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
 #define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1))
 
 typedef void (*rangeinitializer)(void *);
-typedef void (*runner)(const char *, void *, PyGILState_STATE *);
+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,7 +3493,11 @@ init_range_eval(typval_T *rettv UNUSED)
 }
 
     static void
-run_cmd(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate UNUSED)
+run_cmd(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+       , PyGILState_STATE *pygilstate UNUSED
+#endif
+       )
 {
     PyRun_SimpleString((char *) cmd);
 }
@@ -3498,7 +3506,11 @@ static const char        *code_hdr = "def " DOPY_FUNC "(line, linenr):\n ";
 static int             code_hdr_len = 30;
 
     static void
-run_do(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate)
+run_do(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+       , PyGILState_STATE *pygilstate
+#endif
+       )
 {
     PyInt      lnum;
     size_t     len;
@@ -3528,13 +3540,17 @@ run_do(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate)
     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,17 +3570,23 @@ run_do(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate)
 
        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,7 +3596,11 @@ out:
 }
 
     static void
-run_eval(const char *cmd, typval_T *rettv, PyGILState_STATE *pygilstate UNUSED)
+run_eval(const char *cmd, typval_T *rettv
+#ifdef PY_CAN_RECURSE
+       , PyGILState_STATE *pygilstate UNUSED
+#endif
+       )
 {
     PyObject   *r;
 
index 633481a06c12e3cda9aa8b44d591067e4e417494..8cc50c3cf9b3f0a15fee892643339c37e4dce8c4 100644 (file)
@@ -641,7 +641,7 @@ static int initialised = 0;
 #define DICTKEY_UNREF
 #define DICTKEY_DECL
 
-#define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self);
+#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,6 +656,15 @@ static PyObject *DictionaryGetattr(PyObject *, char*);
 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,7 +890,11 @@ DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
     Python_RestoreThread();        /* enter python */
 #endif
 
-    run((char *) cmd, arg, &pygilstate);
+    run((char *) cmd, arg
+#ifdef PY_CAN_RECURSE
+           , &pygilstate
+#endif
+           );
 
 #ifdef PY_CAN_RECURSE
     PyGILState_Release(pygilstate);
index b6507bb77f877a857cf4630b5ef1f107e1d6f267..2ae876ecf6f322f05d943e651669e3dc4ae9bdc0 100644 (file)
@@ -693,6 +693,8 @@ static PyObject *FunctionGetattro(PyObject *, PyObject *);
 
 static struct PyModuleDef vimmodule;
 
+#define PY_CAN_RECURSE
+
 /*
  * Include the code shared with if_python.c
  */
index fac315e2d23e47a6691d51007c65ea9e5e092fa8..d138a8d6a9ee5321591dbeafc59ba109619bcd64 100644 (file)
@@ -518,6 +518,10 @@ EOF
 :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,15 +581,22 @@ py << EOF
 cb.append('Number of tabs: ' + str(len(vim.tabpages)))
 cb.append('Current tab pages:')
 def W(w):
-    if '(unknown)' in repr(w):
+    if repr(w).find('(unknown)') != -1:
         return '<window object (unknown)>'
     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 ' + repr(w.cursor))
+        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:
index 5602b2f103b271bb3b6e62b5731931a632791ca5..d64fa7cf269895f36c717a6dade78096c13dc9b9 100644 (file)
@@ -333,7 +333,7 @@ Number of tabs: 4
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (990, 0)
+    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (27, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
index 69af02eecbb0d87ad31b1521619d8ee960adc61f..95ae0274fb2b7bf25f2dfbb160597ab9e96fd9a2 100644 (file)
@@ -561,18 +561,26 @@ EOF
 :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 '<window object (unknown)>'
     else:
         return repr(w)
-cb.append('Number of tabs: ' + str(len(vim.tabpages)))
-cb.append('Current tab pages:')
+
+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 ' + repr(w.cursor))
+        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:
index 64ef57d5cceb4c1960a2fc19c61687008e95150c..77548d55915bbfa6c90f5c5d9204a514c792efa6 100644 (file)
@@ -322,7 +322,7 @@ Number of tabs: 4
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (966, 0)
+    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (27, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
index c913385a00fad5b3921f15b5434f414ee3d3a3ea..b3c3bff52fdf37cf9b9519b6eab9a2bfca1ea7da 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1003,
 /**/
     1002,
 /**/