From 781234e4bb70da695e80c75eadb6f8fa526ad8fc Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Sep 21 2011 09:23:25 +0000 Subject: - patchlevel 307 --- diff --git a/7.3.307 b/7.3.307 new file mode 100644 index 0000000..3fd95e1 --- /dev/null +++ b/7.3.307 @@ -0,0 +1,180 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.307 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.307 +Problem: Python 3 doesn't support slice assignment. +Solution: Implement slices. (Brett Overesch, Roland Puntaier) +Files: src/if_python3.c + + +*** ../vim-7.3.306/src/if_python3.c 2011-08-28 16:00:14.000000000 +0200 +--- src/if_python3.c 2011-09-14 15:01:26.000000000 +0200 +*************** +*** 855,862 **** + + static Py_ssize_t BufferLength(PyObject *); + static PyObject *BufferItem(PyObject *, Py_ssize_t); +! static PyObject* BufferSubscript(PyObject *self, PyObject* idx); +! static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val); + + + /* Line range type - Implementation functions +--- 855,862 ---- + + static Py_ssize_t BufferLength(PyObject *); + static PyObject *BufferItem(PyObject *, Py_ssize_t); +! static PyObject* BufferSubscript(PyObject *self, PyObject *idx); +! static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val); + + + /* Line range type - Implementation functions +*************** +*** 865,872 **** + + #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType) + +! static PyObject* RangeSubscript(PyObject *self, PyObject* idx); + static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *); + + /* Current objects type - Implementation functions + * ----------------------------------------------- +--- 865,873 ---- + + #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType) + +! static PyObject* RangeSubscript(PyObject *self, PyObject *idx); + static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *); ++ static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val); + + /* Current objects type - Implementation functions + * ----------------------------------------------- +*************** +*** 1035,1041 **** + &step, &slicelen) < 0) { + return NULL; + } +! return BufferSlice(self,start,stop); + } else { + PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); + return NULL; +--- 1036,1042 ---- + &step, &slicelen) < 0) { + return NULL; + } +! return BufferSlice(self, start, stop); + } else { + PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); + return NULL; +*************** +*** 1084,1090 **** + PyMappingMethods RangeAsMapping = { + /* mp_length */ (lenfunc)RangeLength, + /* mp_subscript */ (binaryfunc)RangeSubscript, +! /* mp_ass_subscript */ (objobjargproc)0, + }; + + /* Line range object - Implementation +--- 1085,1091 ---- + PyMappingMethods RangeAsMapping = { + /* mp_length */ (lenfunc)RangeLength, + /* mp_subscript */ (binaryfunc)RangeSubscript, +! /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript, + }; + + /* Line range object - Implementation +*************** +*** 1123,1128 **** +--- 1124,1138 ---- + &((RangeObject *)(self))->end); + } + ++ static Py_ssize_t ++ RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val) ++ { ++ return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val, ++ ((RangeObject *)(self))->start, ++ ((RangeObject *)(self))->end, ++ &((RangeObject *)(self))->end); ++ } ++ + static PyObject * + RangeSubscript(PyObject *self, PyObject* idx) + { +*************** +*** 1138,1150 **** + &step, &slicelen) < 0) { + return NULL; + } +! return RangeSlice(self,start,stop+1); + } else { + PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); + return NULL; + } + } + + /* Buffer list object - Definitions + */ + +--- 1148,1183 ---- + &step, &slicelen) < 0) { + return NULL; + } +! return RangeSlice(self, start, stop); + } else { + PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); + return NULL; + } + } + ++ static Py_ssize_t ++ RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val) ++ { ++ if (PyLong_Check(idx)) { ++ long n = PyLong_AsLong(idx); ++ return RangeAsItem(self, n, val); ++ } else if (PySlice_Check(idx)) { ++ Py_ssize_t start, stop, step, slicelen; ++ ++ if (PySlice_GetIndicesEx((PySliceObject *)idx, ++ ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1, ++ &start, &stop, ++ &step, &slicelen) < 0) { ++ return -1; ++ } ++ return RangeAsSlice(self, start, stop, val); ++ } else { ++ PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); ++ return -1; ++ } ++ } ++ ++ + /* Buffer list object - Definitions + */ + +*** ../vim-7.3.306/src/version.c 2011-09-14 14:43:21.000000000 +0200 +--- src/version.c 2011-09-14 14:58:16.000000000 +0200 +*************** +*** 711,712 **** +--- 711,714 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 307, + /**/ + +-- +The process for understanding customers primarily involves sitting around with +other marketing people and talking about what you would to if you were dumb +enough to be a customer. + (Scott Adams - The Dilbert principle) + + /// 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 ///