| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.584 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.584 |
| Problem: PyCObject is not always defined. |
| Solution: Use PyObject instead. |
| Files: src/if_py_both.h, src/if_python.c |
| |
| |
| |
| |
| |
| *** 2432,2463 **** |
| 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; |
| --- 2432,2456 ---- |
| convert_dl(PyObject *obj, typval_T *tv, |
| pytotvfunc py_to_tv, PyObject *lookupDict) |
| { |
| PyObject *capsule; |
| char hexBuf[sizeof(void *) * 2 + 3]; |
| |
| sprintf(hexBuf, "%p", obj); |
| |
| # ifdef PY_USE_CAPSULE |
| capsule = PyDict_GetItemString(lookupDict, hexBuf); |
| # else |
| ! capsule = (PyObject *)PyDict_GetItemString(lookupDict, hexBuf); |
| # endif |
| + if (capsule == NULL) |
| { |
| # ifdef PY_USE_CAPSULE |
| capsule = PyCapsule_New(tv, NULL, NULL); |
| # else |
| ! capsule = PyCObject_FromVoidPtr(tv, NULL); |
| # endif |
| + PyDict_SetItemString(lookupDict, hexBuf, capsule); |
| + Py_DECREF(capsule); |
| if (py_to_tv(obj, tv, lookupDict) == -1) |
| { |
| tv->v_type = VAR_UNKNOWN; |
| |
| *** 2478,2484 **** |
| # ifdef PY_USE_CAPSULE |
| v = PyCapsule_GetPointer(capsule, NULL); |
| # else |
| ! v = PyCObject_AsVoidPtr(cobject); |
| # endif |
| copy_tv(v, tv); |
| } |
| --- 2471,2477 ---- |
| # ifdef PY_USE_CAPSULE |
| v = PyCapsule_GetPointer(capsule, NULL); |
| # else |
| ! v = PyCObject_AsVoidPtr(capsule); |
| # endif |
| copy_tv(v, tv); |
| } |
| |
| |
| |
| *** 327,334 **** |
| 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 */ |
| --- 327,334 ---- |
| static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor); |
| static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *); |
| # else |
| ! static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *)); |
| ! static void* (*dll_PyCObject_AsVoidPtr)(PyObject *); |
| # endif |
| |
| static HINSTANCE hinstPython = 0; /* Instance of python.dll */ |
| |
| |
| |
| *** 716,717 **** |
| --- 716,719 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 584, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 91. It's Saturday afternoon in the middle of May and you |
| are on computer. |
| |
| /// 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 /// |