diff src/if_py_both.h @ 3638:80ed6aa7b9eb v7.3.579

updated for version 7.3.579 Problem: Can't compile with Python 2.5. Solution: Use PyCObject when Capsules are not available.
author Bram Moolenaar <bram@vim.org>
date Fri, 29 Jun 2012 16:28:28 +0200
parents 0e9b2622c94a
children f02b6ad168ae
line wrap: on
line diff
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -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 *, ty
 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;