home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 7.3 / 7.3.1065 < prev    next >
Encoding:
Internet Message Format  |  2013-05-29  |  11.6 KB

  1. To: vim_dev@googlegroups.com
  2. Subject: Patch 7.3.1065
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 7.3.1065
  11. Problem:    Python: key mapping is not standard.
  12. Solution:   Puthon patch 24: use PyMapping_Keys. (ZyX)
  13. Files:        src/if_py_both.h, src/if_python3.c, src/if_python.c
  14.  
  15.  
  16. *** ../vim-7.3.1064/src/if_py_both.h    2013-05-30 13:17:13.000000000 +0200
  17. --- src/if_py_both.h    2013-05-30 13:19:50.000000000 +0200
  18. ***************
  19. *** 4612,4621 ****
  20.       char_u    *key;
  21.       dictitem_T    *di;
  22.       PyObject    *list;
  23. !     PyObject    *litem;
  24.       PyObject    *keyObject;
  25.       PyObject    *valObject;
  26. -     Py_ssize_t    lsize;
  27.   
  28.       if (!(dict = dict_alloc()))
  29.       return -1;
  30. --- 4612,4620 ----
  31.       char_u    *key;
  32.       dictitem_T    *di;
  33.       PyObject    *list;
  34. !     PyObject    *iterator;
  35.       PyObject    *keyObject;
  36.       PyObject    *valObject;
  37.   
  38.       if (!(dict = dict_alloc()))
  39.       return -1;
  40. ***************
  41. *** 4623,4683 ****
  42.       tv->v_type = VAR_DICT;
  43.       tv->vval.v_dict = dict;
  44.   
  45. !     list = PyMapping_Items(obj);
  46. !     if (list == NULL)
  47.       {
  48.       dict_unref(dict);
  49.       return -1;
  50.       }
  51. -     lsize = PyList_Size(list);
  52. -     while (lsize--)
  53. -     {
  54. -     DICTKEY_DECL
  55.   
  56. !     litem = PyList_GetItem(list, lsize);
  57. !     if (litem == NULL)
  58. !     {
  59. !         Py_DECREF(list);
  60. !         dict_unref(dict);
  61. !         return -1;
  62. !     }
  63.   
  64. !     if (!(keyObject = PyTuple_GetItem(litem, 0)))
  65. !     {
  66. !         Py_DECREF(list);
  67. !         Py_DECREF(litem);
  68. !         dict_unref(dict);
  69. !         return -1;
  70. !     }
  71.   
  72.       if (!DICTKEY_SET_KEY)
  73.       {
  74.           dict_unref(dict);
  75. -         Py_DECREF(list);
  76. -         Py_DECREF(litem);
  77.           DICTKEY_UNREF
  78.           return -1;
  79.       }
  80.       DICTKEY_CHECK_EMPTY(-1)
  81.   
  82. !     if (!(valObject = PyTuple_GetItem(litem, 1)))
  83.       {
  84. !         Py_DECREF(list);
  85. !         Py_DECREF(litem);
  86.           dict_unref(dict);
  87.           DICTKEY_UNREF
  88.           return -1;
  89.       }
  90.   
  91. -     Py_DECREF(litem);
  92.       di = dictitem_alloc(key);
  93.   
  94.       DICTKEY_UNREF
  95.   
  96.       if (di == NULL)
  97.       {
  98. !         Py_DECREF(list);
  99.           dict_unref(dict);
  100.           PyErr_NoMemory();
  101.           return -1;
  102. --- 4622,4673 ----
  103.       tv->v_type = VAR_DICT;
  104.       tv->vval.v_dict = dict;
  105.   
  106. !     if (!(list = PyMapping_Keys(obj)))
  107.       {
  108.       dict_unref(dict);
  109.       return -1;
  110.       }
  111.   
  112. !     if (!(iterator = PyObject_GetIter(list)))
  113. !     {
  114. !     dict_unref(dict);
  115. !     Py_DECREF(list);
  116. !     return -1;
  117. !     }
  118. !     Py_DECREF(list);
  119.   
  120. !     while ((keyObject = PyIter_Next(iterator)))
  121. !     {
  122. !     DICTKEY_DECL
  123.   
  124.       if (!DICTKEY_SET_KEY)
  125.       {
  126. +         Py_DECREF(iterator);
  127.           dict_unref(dict);
  128.           DICTKEY_UNREF
  129.           return -1;
  130.       }
  131.       DICTKEY_CHECK_EMPTY(-1)
  132.   
  133. !     if (!(valObject = PyObject_GetItem(obj, keyObject)))
  134.       {
  135. !         Py_DECREF(keyObject);
  136. !         Py_DECREF(iterator);
  137.           dict_unref(dict);
  138.           DICTKEY_UNREF
  139.           return -1;
  140.       }
  141.   
  142.       di = dictitem_alloc(key);
  143.   
  144.       DICTKEY_UNREF
  145.   
  146. +     Py_DECREF(keyObject);
  147.       if (di == NULL)
  148.       {
  149. !         Py_DECREF(iterator);
  150. !         Py_DECREF(valObject);
  151.           dict_unref(dict);
  152.           PyErr_NoMemory();
  153.           return -1;
  154. ***************
  155. *** 4686,4708 ****
  156.   
  157.       if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
  158.       {
  159.           vim_free(di);
  160.           dict_unref(dict);
  161. -         Py_DECREF(list);
  162.           return -1;
  163.       }
  164.   
  165.       if (dict_add(dict, di) == FAIL)
  166.       {
  167.           dictitem_free(di);
  168.           dict_unref(dict);
  169. -         Py_DECREF(list);
  170.           PyErr_SetVim(_("failed to add key to dictionary"));
  171.           return -1;
  172.       }
  173.       }
  174.       --dict->dv_refcount;
  175. -     Py_DECREF(list);
  176.       return 0;
  177.   }
  178.   
  179. --- 4676,4701 ----
  180.   
  181.       if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
  182.       {
  183. +         Py_DECREF(iterator);
  184. +         Py_DECREF(valObject);
  185.           vim_free(di);
  186.           dict_unref(dict);
  187.           return -1;
  188.       }
  189.   
  190. +     Py_DECREF(valObject);
  191.       if (dict_add(dict, di) == FAIL)
  192.       {
  193. +         Py_DECREF(iterator);
  194.           dictitem_free(di);
  195.           dict_unref(dict);
  196.           PyErr_SetVim(_("failed to add key to dictionary"));
  197.           return -1;
  198.       }
  199.       }
  200. +     Py_DECREF(iterator);
  201.       --dict->dv_refcount;
  202.       return 0;
  203.   }
  204.   
  205. ***************
  206. *** 4907,4912 ****
  207. --- 4900,4907 ----
  208.       tv->vval.v_float = (float_T) PyFloat_AsDouble(obj);
  209.       }
  210.   #endif
  211. +     else if (PyObject_HasAttrString(obj, "keys"))
  212. +     return convert_dl(obj, tv, pymap_to_tv, lookup_dict);
  213.       else if (PyIter_Check(obj) || PySequence_Check(obj))
  214.       return convert_dl(obj, tv, pyseq_to_tv, lookup_dict);
  215.       else if (PyMapping_Check(obj))
  216. *** ../vim-7.3.1064/src/if_python3.c    2013-05-30 13:01:14.000000000 +0200
  217. --- src/if_python3.c    2013-05-30 13:19:50.000000000 +0200
  218. ***************
  219. *** 160,168 ****
  220.   # define PyDict_GetItemString py3_PyDict_GetItemString
  221.   # define PyDict_Next py3_PyDict_Next
  222.   # define PyMapping_Check py3_PyMapping_Check
  223. ! # define PyMapping_Items py3_PyMapping_Items
  224.   # define PyIter_Next py3_PyIter_Next
  225.   # define PyObject_GetIter py3_PyObject_GetIter
  226.   # define PyObject_IsTrue py3_PyObject_IsTrue
  227.   # define PyModule_GetDict py3_PyModule_GetDict
  228.   #undef PyRun_SimpleString
  229. --- 160,169 ----
  230.   # define PyDict_GetItemString py3_PyDict_GetItemString
  231.   # define PyDict_Next py3_PyDict_Next
  232.   # define PyMapping_Check py3_PyMapping_Check
  233. ! # define PyMapping_Keys py3_PyMapping_Keys
  234.   # define PyIter_Next py3_PyIter_Next
  235.   # define PyObject_GetIter py3_PyObject_GetIter
  236. + # define PyObject_GetItem py3_PyObject_GetItem
  237.   # define PyObject_IsTrue py3_PyObject_IsTrue
  238.   # define PyModule_GetDict py3_PyModule_GetDict
  239.   #undef PyRun_SimpleString
  240. ***************
  241. *** 276,282 ****
  242.   static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
  243.   static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
  244.   static int (*py3_PyMapping_Check)(PyObject *);
  245. ! static PyObject* (*py3_PyMapping_Items)(PyObject *);
  246.   static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
  247.                Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
  248.   static PyObject* (*py3_PyErr_NoMemory)(void);
  249. --- 277,283 ----
  250.   static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
  251.   static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
  252.   static int (*py3_PyMapping_Check)(PyObject *);
  253. ! static PyObject* (*py3_PyMapping_Keys)(PyObject *);
  254.   static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
  255.                Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
  256.   static PyObject* (*py3_PyErr_NoMemory)(void);
  257. ***************
  258. *** 304,309 ****
  259. --- 305,311 ----
  260.   static PyObject* (*py3_PyDict_New)(void);
  261.   static PyObject* (*py3_PyIter_Next)(PyObject *);
  262.   static PyObject* (*py3_PyObject_GetIter)(PyObject *);
  263. + static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *);
  264.   static int (*py3_PyObject_IsTrue)(PyObject *);
  265.   static PyObject* (*py3_Py_BuildValue)(char *, ...);
  266.   static int (*py3_PyType_Ready)(PyTypeObject *type);
  267. ***************
  268. *** 456,464 ****
  269.       {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
  270.       {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
  271.       {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
  272. !     {"PyMapping_Items", (PYTHON_PROC*)&py3_PyMapping_Items},
  273.       {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
  274.       {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
  275.       {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue},
  276.       {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
  277.       {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
  278. --- 458,467 ----
  279.       {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
  280.       {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
  281.       {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
  282. !     {"PyMapping_Keys", (PYTHON_PROC*)&py3_PyMapping_Keys},
  283.       {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
  284.       {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
  285. +     {"PyObject_GetItem", (PYTHON_PROC*)&py3_PyObject_GetItem},
  286.       {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue},
  287.       {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
  288.       {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
  289. *** ../vim-7.3.1064/src/if_python.c    2013-05-30 13:01:14.000000000 +0200
  290. --- src/if_python.c    2013-05-30 13:19:50.000000000 +0200
  291. ***************
  292. *** 197,207 ****
  293.   # define PyDict_GetItemString dll_PyDict_GetItemString
  294.   # define PyDict_Next dll_PyDict_Next
  295.   # define PyDict_Type (*dll_PyDict_Type)
  296. ! # ifdef PyMapping_Items
  297. ! #  define PY_NO_MAPPING_ITEMS
  298.   # else
  299. ! #  define PyMapping_Items dll_PyMapping_Items
  300.   # endif
  301.   # define PyObject_CallMethod dll_PyObject_CallMethod
  302.   # define PyMapping_Check dll_PyMapping_Check
  303.   # define PyIter_Next dll_PyIter_Next
  304. --- 197,208 ----
  305.   # define PyDict_GetItemString dll_PyDict_GetItemString
  306.   # define PyDict_Next dll_PyDict_Next
  307.   # define PyDict_Type (*dll_PyDict_Type)
  308. ! # ifdef PyMapping_Keys
  309. ! #  define PY_NO_MAPPING_KEYS
  310.   # else
  311. ! #  define PyMapping_Keys dll_PyMapping_Keys
  312.   # endif
  313. + # define PyObject_GetItem dll_PyObject_GetItem
  314.   # define PyObject_CallMethod dll_PyObject_CallMethod
  315.   # define PyMapping_Check dll_PyMapping_Check
  316.   # define PyIter_Next dll_PyIter_Next
  317. ***************
  318. *** 331,339 ****
  319.   static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
  320.   static int (*dll_PyDict_Next)(PyObject *, PyInt *, PyObject **, PyObject **);
  321.   static PyTypeObject* dll_PyDict_Type;
  322. ! # ifndef PY_NO_MAPPING_ITEMS
  323. ! static PyObject* (*dll_PyMapping_Items)(PyObject *);
  324.   # endif
  325.   static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
  326.   static int (*dll_PyMapping_Check)(PyObject *);
  327.   static PyObject* (*dll_PyIter_Next)(PyObject *);
  328. --- 332,341 ----
  329.   static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
  330.   static int (*dll_PyDict_Next)(PyObject *, PyInt *, PyObject **, PyObject **);
  331.   static PyTypeObject* dll_PyDict_Type;
  332. ! # ifndef PY_NO_MAPPING_KEYS
  333. ! static PyObject* (*dll_PyMapping_Keys)(PyObject *);
  334.   # endif
  335. + static PyObject* (*dll_PyObject_GetItem)(PyObject *, PyObject *);
  336.   static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
  337.   static int (*dll_PyMapping_Check)(PyObject *);
  338.   static PyObject* (*dll_PyIter_Next)(PyObject *);
  339. ***************
  340. *** 494,502 ****
  341.       {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
  342.       {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
  343.       {"PyDict_Type", (PYTHON_PROC*)&dll_PyDict_Type},
  344. ! # ifndef PY_NO_MAPPING_ITEMS
  345. !     {"PyMapping_Items", (PYTHON_PROC*)&dll_PyMapping_Items},
  346.   # endif
  347.       {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
  348.       {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
  349.       {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
  350. --- 496,505 ----
  351.       {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
  352.       {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
  353.       {"PyDict_Type", (PYTHON_PROC*)&dll_PyDict_Type},
  354. ! # ifndef PY_NO_MAPPING_KEYS
  355. !     {"PyMapping_Keys", (PYTHON_PROC*)&dll_PyMapping_Keys},
  356.   # endif
  357. +     {"PyObject_GetItem", (PYTHON_PROC*)&dll_PyObject_GetItem},
  358.       {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
  359.       {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
  360.       {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
  361. *** ../vim-7.3.1064/src/version.c    2013-05-30 13:17:13.000000000 +0200
  362. --- src/version.c    2013-05-30 13:19:32.000000000 +0200
  363. ***************
  364. *** 730,731 ****
  365. --- 730,733 ----
  366.   {   /* Add new patch number below this line */
  367. + /**/
  368. +     1065,
  369.   /**/
  370.  
  371. -- 
  372. How To Keep A Healthy Level Of Insanity:
  373. 8. Don't use any punctuation marks.
  374.  
  375.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  376. ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  377. \\\  an exciting new programming language -- http://www.Zimbu.org        ///
  378.  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
  379.