summaryrefslogtreecommitdiff
path: root/src/if_python3.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2014-01-14 16:36:51 +0100
committerBram Moolenaar <Bram@vim.org>2014-01-14 16:36:51 +0100
commit063a46ba77c3251f0b5245e872dcbad003c71024 (patch)
treee85d7ca1c040ef4ecbef8f7bbbf7d92fe4ce823c /src/if_python3.c
parent14177b77bf7bb9c3f1c7c8805bc6cff1b651c136 (diff)
downloadvim-git-063a46ba77c3251f0b5245e872dcbad003c71024.tar.gz
updated for version 7.4.151v7.4.151
Problem: Python: slices with steps are not supported. Solution: Support slices in Python vim.List. (ZyX)
Diffstat (limited to 'src/if_python3.c')
-rw-r--r--src/if_python3.c76
1 files changed, 5 insertions, 71 deletions
diff --git a/src/if_python3.c b/src/if_python3.c
index 40bc97bc8..55779e79b 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -97,6 +97,9 @@
#define Py_ssize_t_fmt "n"
#define Py_bytes_fmt "y"
+#define PyIntArgFunc ssizeargfunc
+#define PyIntObjArgProc ssizeobjargproc
+
#if defined(DYNAMIC_PYTHON3) || defined(PROTO)
# ifndef WIN3264
@@ -292,7 +295,8 @@ static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
static int (*py3_PyMapping_Check)(PyObject *);
static PyObject* (*py3_PyMapping_Keys)(PyObject *);
static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
- Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
+ Py_ssize_t *slicelen);
static PyObject* (*py3_PyErr_NoMemory)(void);
static void (*py3_Py_Finalize)(void);
static void (*py3_PyErr_SetString)(PyObject *, const char *);
@@ -1478,76 +1482,6 @@ DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
/* List object - Definitions
*/
-static PySequenceMethods ListAsSeq = {
- (lenfunc) ListLength, /* sq_length, len(x) */
- (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
- (ssizeargfunc) 0, /* RangeRepeat, sq_repeat, x*n */
- (ssizeargfunc) ListItem, /* sq_item, x[i] */
- (void *) 0, /* was_sq_slice, x[i:j] */
- (ssizeobjargproc) ListAssItem, /* sq_as_item, x[i]=v */
- (void *) 0, /* was_sq_ass_slice, x[i:j]=v */
- 0, /* sq_contains */
- (binaryfunc) ListConcatInPlace,/* sq_inplace_concat */
- 0, /* sq_inplace_repeat */
-};
-
-static PyObject *ListSubscript(PyObject *, PyObject *);
-static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
-
-static PyMappingMethods ListAsMapping = {
- /* mp_length */ (lenfunc) ListLength,
- /* mp_subscript */ (binaryfunc) ListSubscript,
- /* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
-};
-
- static PyObject *
-ListSubscript(PyObject *self, PyObject* idx)
-{
- if (PyLong_Check(idx))
- {
- long _idx = PyLong_AsLong(idx);
- return ListItem((ListObject *)(self), _idx);
- }
- else if (PySlice_Check(idx))
- {
- Py_ssize_t start, stop, step, slicelen;
-
- if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
- &start, &stop, &step, &slicelen) < 0)
- return NULL;
- return ListSlice((ListObject *)(self), start, stop);
- }
- else
- {
- RAISE_INVALID_INDEX_TYPE(idx);
- return NULL;
- }
-}
-
- static Py_ssize_t
-ListAsSubscript(PyObject *self, PyObject *idx, PyObject *obj)
-{
- if (PyLong_Check(idx))
- {
- long _idx = PyLong_AsLong(idx);
- return ListAssItem((ListObject *)(self), _idx, obj);
- }
- else if (PySlice_Check(idx))
- {
- Py_ssize_t start, stop, step, slicelen;
-
- if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
- &start, &stop, &step, &slicelen) < 0)
- return -1;
- return ListAssSlice((ListObject *)(self), start, stop, obj);
- }
- else
- {
- RAISE_INVALID_INDEX_TYPE(idx);
- return -1;
- }
-}
-
static PyObject *
ListGetattro(PyObject *self, PyObject *nameobj)
{