]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.579 v7.3.579
authorBram Moolenaar <Bram@vim.org>
Fri, 29 Jun 2012 14:28:28 +0000 (16:28 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 29 Jun 2012 14:28:28 +0000 (16:28 +0200)
Problem:    Can't compile with Python 2.5.
Solution:   Use PyCObject when Capsules are not available.

src/if_py_both.h
src/if_python.c
src/if_python3.c
src/version.c

index d828358e7ff8322d9bb9a34d30e04a27a6ab9c71..8229458d880c7d7abfb0ae4c91127eb86fe7b3bf 100644 (file)
@@ -56,7 +56,7 @@ static struct PyMethodDef OutputMethods[] = {
     /* name,       function,           calling,    documentation */
     {"write",      OutputWrite,        1,          ""},
     {"writelines",  OutputWritelines,  1,          ""},
-    {"flush",       OutputFlush,        1,          ""},
+    {"flush",      OutputFlush,        1,          ""},
     { NULL,        NULL,               0,          NULL}
 };
 
@@ -506,8 +506,8 @@ static struct PyMethodDef VimMethods[] = {
     /* name,        function,          calling,    documentation */
     {"command",             VimCommand,        1,          "Execute a Vim ex-mode command" },
     {"eval",        VimEval,           1,          "Evaluate an expression using Vim evaluator" },
-    {"bindeval",     VimEvalPy,         1,          "Like eval(), but returns objects attached to vim ones"},
-    {"strwidth",     VimStrwidth,       1,          "Screen string width, counts <Tab> as having width 1"},
+    {"bindeval",     VimEvalPy,                1,          "Like eval(), but returns objects attached to vim ones"},
+    {"strwidth",     VimStrwidth,      1,          "Screen string width, counts <Tab> as having width 1"},
     { NULL,         NULL,              0,          NULL }
 };
 
@@ -2432,17 +2432,32 @@ typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
 convert_dl(PyObject *obj, typval_T *tv,
                                    pytotvfunc py_to_tv, PyObject *lookupDict)
 {
+# ifdef PY_USE_CAPSULE
     PyObject   *capsule;
+# else
+    PyCObject  *cobject;
+# endif
     char       hexBuf[sizeof(void *) * 2 + 3];
 
     sprintf(hexBuf, "%p", obj);
 
+# ifdef PY_USE_CAPSULE
     capsule = PyDict_GetItemString(lookupDict, hexBuf);
     if (capsule == NULL)
+# else
+    cobject = (PyCObject *)PyDict_GetItemString(lookupDict, hexBuf);
+    if (cobject == NULL)
+# endif
     {
+# ifdef PY_USE_CAPSULE
        capsule = PyCapsule_New(tv, NULL, NULL);
        PyDict_SetItemString(lookupDict, hexBuf, capsule);
        Py_DECREF(capsule);
+# else
+       cobject = PyCObject_FromVoidPtr(tv, NULL);
+       PyDict_SetItemString(lookupDict, hexBuf, cobject);
+       Py_DECREF(cobject);
+# endif
        if (py_to_tv(obj, tv, lookupDict) == -1)
        {
            tv->v_type = VAR_UNKNOWN;
@@ -2458,7 +2473,13 @@ convert_dl(PyObject *obj, typval_T *tv,
     }
     else
     {
-       typval_T        *v = PyCapsule_GetPointer(capsule, NULL);
+       typval_T        *v;
+
+# ifdef PY_USE_CAPSULE
+       v = PyCapsule_GetPointer(capsule, NULL);
+# else
+       v = PyCObject_AsVoidPtr(cobject);
+# endif
        copy_tv(v, tv);
     }
     return 0;
index 23d58d1225e8a956d89a527de591ee8ae50d4ddb..0667b5eaa83dd4b44e271af529b4cb0b0453afb6 100644 (file)
@@ -71,6 +71,10 @@ struct PyMethodDef { Py_ssize_t a; };
 # define PySequenceMethods Py_ssize_t
 #endif
 
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+# define PY_USE_CAPSULE
+#endif
+
 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
 # define PyInt Py_ssize_t
 # define PyInquiry lenfunc
@@ -220,8 +224,13 @@ struct PyMethodDef { Py_ssize_t a; };
 #  define PyObject_Malloc dll_PyObject_Malloc
 #  define PyObject_Free dll_PyObject_Free
 # endif
-# define PyCapsule_New dll_PyCapsule_New
-# define PyCapsule_GetPointer dll_PyCapsule_GetPointer
+# ifdef PY_USE_CAPSULE
+#  define PyCapsule_New dll_PyCapsule_New
+#  define PyCapsule_GetPointer dll_PyCapsule_GetPointer
+# else
+#  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
+#  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
+# endif
 
 /*
  * Pointers for dynamic link
@@ -309,8 +318,13 @@ static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
 static void* (*dll_PyObject_Malloc)(size_t);
 static void (*dll_PyObject_Free)(void*);
 # endif
+# ifdef PY_USE_CAPSULE
 static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
 static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
+# else
+static PyCObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
+static void* (*dll_PyCObject_AsVoidPtr)(PyCObject *);
+# endif
 
 static HINSTANCE hinstPython = 0; /* Instance of python.dll */
 
@@ -403,7 +417,8 @@ static struct
     {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
     {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
     {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
-# if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
+       && SIZEOF_SIZE_T != SIZEOF_INT
     {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
 # else
     {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
@@ -424,8 +439,13 @@ static struct
     {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
     {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
 # endif
+# ifdef PY_USE_CAPSULE
     {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
     {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
+# else
+    {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
+    {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
+# endif
     {"", NULL},
 };
 
index c4e122c29020c7e59c8ef4f9e3e2afbc37e574b9..a62971e886e4efc0e66e34b407a1fbbc09218329 100644 (file)
@@ -75,6 +75,9 @@ static void init_structs(void);
 # define CODEC_ERROR_HANDLER NULL
 #endif
 
+/* Python 3 does not support CObjects, always use Capsules */
+#define PY_USE_CAPSULE
+
 #define PyInt Py_ssize_t
 #define PyString_Check(obj) PyUnicode_Check(obj)
 #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER)
index 9ab5188f876f8040debc7b2e665b305b5d033c76..074ce3e53d60baf3cf1ae6eb0855a2497ae2bcdc 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    579,
 /**/
     578,
 /**/